โดยสังเขป
เซกชั่นคลาย (บางครั้งเรียกว่าทางออกเซกเมนต์ ) สามารถใช้เพื่อนำทางกลับผ่านส่วนย่อยแบบผลักแบบโมดอลหรือแบบป๊อปโอเวอร์ (ราวกับว่าคุณโผล่รายการการนำทางจากแถบนำทางปิดป๊อปโอเวอร์หรือยกเลิกตัวควบคุมมุมมอง ยิ่งไปกว่านั้นคุณสามารถผ่อนคลายได้อย่างแท้จริงไม่เพียงแค่หนึ่งเดียวเท่านั้น แต่ยังมีชุดของส่วนขยายแบบพุช / โมดอล / ป๊อปโอเวอร์เช่น "ย้อนกลับ" หลายขั้นตอนในลำดับการนำทางของคุณด้วยการผ่อนคลายเพียงครั้งเดียว
เมื่อคุณทำการแยกส่วนคลายคุณต้องระบุการกระทำซึ่งเป็นวิธีการกระทำของตัวควบคุมมุมมองที่คุณต้องการคลาย
Objective-C:
- (IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue
{
}
สวิฟท์:
@IBAction func unwindToThisViewController(segue: UIStoryboardSegue) {
}
ชื่อของวิธีการกระทำนี้จะใช้เมื่อคุณสร้างส่วนต่อเนื่องที่ผ่อนคลายในกระดานเรื่องราว นอกจากนี้วิธีการนี้เรียกว่าก่อนที่จะมีการดำเนินการผ่อนคลาย คุณสามารถรับตัวควบคุมมุมมองต้นฉบับจากUIStoryboardSegue
พารามิเตอร์ที่ส่งผ่านเพื่อโต้ตอบกับตัวควบคุมมุมมองที่เริ่มต้น segue (เช่นเพื่อรับค่าคุณสมบัติของตัวควบคุมมุมมอง modal) ในแง่นี้วิธีการที่มีฟังก์ชั่นที่คล้ายกันเป็นวิธีการของprepareForSegue:
UIViewController
iOS 8 UPDATE:ผ่อนคลาย segues ยังทำงานกับ iOS 8 segues การปรับตัวเช่นการแสดงและแสดงรายละเอียด
ตัวอย่าง
ให้เรามีกระดานเรื่องราวพร้อมตัวควบคุมการนำทางและตัวควบคุมลูกที่สาม:
จาก Green View Controller คุณสามารถคลาย (นำทางกลับ) ไปที่ Red View Controller จากสีฟ้าคุณสามารถผ่อนคลายเป็นสีเขียวหรือสีแดงผ่านสีเขียว ในการเปิดใช้งานการคลายคุณต้องเพิ่มวิธีการพิเศษลงในสีแดงและเขียวเช่นนี่คือวิธีการดำเนินการในสีแดง:
Objective-C:
@implementation RedViewController
- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
}
@end
สวิฟท์:
@IBAction func unwindToRed(segue: UIStoryboardSegue) {
}
หลังจากเพิ่มวิธีการดำเนินการแล้วคุณสามารถกำหนดส่วนเสริมคลายในกระดานเรื่องราวโดยการลากตัวควบคุมไปที่ไอคอนออก ที่นี่เราต้องการคลายเป็นสีแดงจากสีเขียวเมื่อกดปุ่ม:
คุณต้องเลือกการกระทำที่กำหนดไว้ในตัวควบคุมมุมมองที่คุณต้องการผ่อนคลาย:
นอกจากนี้คุณยังสามารถผ่อนคลายไปที่ Red from Blue (ซึ่งอยู่ห่างออกไปสองก้าวในการนำทาง) กุญแจสำคัญคือการเลือกการดำเนินการผ่อนคลายที่ถูกต้อง
ก่อนที่จะดำเนินการต่อคลายผ่อนคลายวิธีการดำเนินการที่เรียกว่า ในตัวอย่างฉันนิยามคำว่าผ่อนปรนเป็นสีแดงจากทั้งสีเขียวและสีน้ำเงิน เราสามารถเข้าถึงแหล่งที่มาของการผ่อนคลายในวิธีการดำเนินการผ่านพารามิเตอร์ UIStoryboardSegue:
Objective-C:
- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
UIViewController* sourceViewController = unwindSegue.sourceViewController;
if ([sourceViewController isKindOfClass:[BlueViewController class]])
{
NSLog(@"Coming from BLUE!");
}
else if ([sourceViewController isKindOfClass:[GreenViewController class]])
{
NSLog(@"Coming from GREEN!");
}
}
สวิฟท์:
@IBAction func unwindToRed(unwindSegue: UIStoryboardSegue) {
if let blueViewController = unwindSegue.sourceViewController as? BlueViewController {
println("Coming from BLUE")
}
else if let redViewController = unwindSegue.sourceViewController as? RedViewController {
println("Coming from RED")
}
}
การคลี่คลายยังทำงานผ่านการรวมกันของส่วนผลักดัน / กิริยา เช่นถ้าฉันเพิ่มตัวควบคุมมุมมองสีเหลืองอีกตัวด้วยชุดคำกริยาเราสามารถคลายตัวจากสีเหลืองไปจนถึงสีแดงได้ในขั้นตอนเดียว:
คลี่คลายจากรหัส
เมื่อคุณกำหนดเซกชั่นคลายโดยการลากตัวควบคุมบางอย่างไปที่สัญลักษณ์ออกของตัวควบคุมมุมมองเซกเมนต์ใหม่จะปรากฏใน Document Outline:
การเลือกทำต่อและไปที่ตัวตรวจสอบคุณสมบัติจะแสดงคุณสมบัติ "ตัวระบุ" ใช้สิ่งนี้เพื่อให้ตัวระบุที่ไม่ซ้ำกับส่วนย่อยของคุณ:
หลังจากนี้การทำต่อคลายสามารถทำได้จากรหัสเช่นเดียวกับส่วนอื่น ๆ :
Objective-C:
[self performSegueWithIdentifier:@"UnwindToRedSegueID" sender:self];
สวิฟท์:
performSegueWithIdentifier("UnwindToRedSegueID", sender: self)
dismissViewControllerAnimated:completion:
หรือpopViewControllerAnimated:
บรรลุสิ่งเดียวกัน?