Tóm lại
Một segue thư giãn (đôi khi được gọi là segue thoát ) có thể được sử dụng để điều hướng trở lại thông qua các phân đoạn đẩy, phương thức hoặc popover (như khi bạn bật mục điều hướng từ thanh điều hướng, đóng cửa sổ bật lên hoặc loại bỏ bộ điều khiển xem được trình bày theo phương thức). Trên hết, bạn thực sự có thể thư giãn thông qua không chỉ một mà một loạt các phân đoạn đẩy / phương thức / popover, ví dụ: "quay lại" nhiều bước trong hệ thống phân cấp điều hướng của bạn với một hành động thư giãn duy nhất.
Khi bạn thực hiện một segue thư giãn, bạn cần chỉ định một hành động, đó là một phương thức hành động của bộ điều khiển xem mà bạn muốn thư giãn.
Mục tiêu-C:
- (IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue
{
}
Nhanh:
@IBAction func unwindToThisViewController(segue: UIStoryboardSegue) {
}
Tên của phương thức hành động này được sử dụng khi bạn tạo segue thư giãn trong bảng phân cảnh. Hơn nữa, phương pháp này được gọi ngay trước khi thực hiện phân tách thư giãn. Bạn có thể lấy bộ điều khiển chế độ xem nguồn từ UIStoryboardSegue
tham số đã truyền để tương tác với bộ điều khiển khung nhìn đã khởi tạo segue (ví dụ: để lấy các giá trị thuộc tính của bộ điều khiển chế độ xem phương thức). Về mặt này, phương thức có chức năng tương tự như prepareForSegue:
phương thức UIViewController
.
Cập nhật iOS 8: Unwind segues cũng hoạt động với các phân biệt thích ứng của iOS 8, chẳng hạn như Hiển thị và Hiển thị chi tiết .
Một ví dụ
Hãy để chúng tôi có một bảng phân cảnh với bộ điều khiển điều hướng và ba bộ điều khiển xem con:
Từ Bộ điều khiển Chế độ xem Xanh, bạn có thể thư giãn (điều hướng trở lại) đến Bộ điều khiển Chế độ xem Đỏ. Từ Blue bạn có thể thư giãn sang Green hoặc Red qua Green. Để bật chức năng hủy kết nối, bạn phải thêm các phương thức hành động đặc biệt vào Đỏ và Xanh lục, ví dụ: đây là phương thức hành động trong Đỏ:
Mục tiêu-C:
@implementation RedViewController
- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
}
@end
Nhanh:
@IBAction func unwindToRed(segue: UIStoryboardSegue) {
}
Sau khi phương thức hành động đã được thêm vào, bạn có thể xác định khoảng cách thư giãn trong bảng phân cảnh bằng cách kéo điều khiển vào biểu tượng Thoát. Ở đây chúng tôi muốn thư giãn sang Red from Green khi nhấn nút:
Bạn phải chọn hành động được xác định trong trình điều khiển xem bạn muốn thư giãn để:
Bạn cũng có thể thư giãn sang Red from Blue (cách "hai bước" trong ngăn xếp điều hướng). Điều quan trọng là chọn hành động thư giãn chính xác.
Trước khi phân tách thư giãn được thực hiện, phương thức hành động được gọi. Trong ví dụ này, tôi đã định nghĩa một segue thư giãn cho Red từ cả Green và Blue. Chúng ta có thể truy cập vào nguồn thư giãn trong phương thức hành động thông qua tham số UIStoryboardSegue:
Mục tiêu-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!");
}
}
Nhanh:
@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")
}
}
Unwinding cũng hoạt động thông qua sự kết hợp của các phân đoạn đẩy / phương thức. Ví dụ: nếu tôi đã thêm một bộ điều khiển chế độ xem Màu vàng khác với một phân biệt phương thức, chúng ta có thể thư giãn từ Màu vàng trở lại màu Đỏ trong một bước duy nhất:
Unwinding từ Code
Khi bạn xác định một segue thư giãn bằng cách điều khiển - kéo một cái gì đó vào biểu tượng Thoát của bộ điều khiển xem, một segue mới xuất hiện trong Outline tài liệu:
Việc chọn segue và đi đến Thanh tra thuộc tính sẽ hiển thị thuộc tính "Định danh". Sử dụng công cụ này để cung cấp một mã định danh duy nhất cho segue của bạn:
Sau này, segue thư giãn có thể được thực hiện từ mã giống như bất kỳ segue nào khác:
Mục tiêu-C:
[self performSegueWithIdentifier:@"UnwindToRedSegueID" sender:self];
Nhanh:
performSegueWithIdentifier("UnwindToRedSegueID", sender: self)
dismissViewControllerAnimated:completion:
hoặcpopViewControllerAnimated:
đạt được điều tương tự?