Sử dụng bảng phân cảnh này rất dễ dàng. Bạn chỉ cần kéo hành động để "Thoát". Nhưng làm thế nào tôi nên gọi nó từ mã của tôi?
Sử dụng bảng phân cảnh này rất dễ dàng. Bạn chỉ cần kéo hành động để "Thoát". Nhưng làm thế nào tôi nên gọi nó từ mã của tôi?
Câu trả lời:
Chèn Tên của Segue để thư giãn.
Sau đó, - (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender.
với nhận dạng segue của bạn.
Đây là một câu trả lời hoàn chỉnh với Objective C và Swift:
1) Tạo một IBAction
segue thư giãn trong bộ điều khiển xem đích của bạn (nơi bạn muốn segue đến). Bất cứ nơi nào trong tập tin thực hiện.
// Objective C
- (IBAction)unwindToContainerVC:(UIStoryboardSegue *)segue {
}
// Swift
@IBAction func unwindToContainerVC(segue: UIStoryboardSegue) {
}
2) Trên bộ điều khiển chế độ xem nguồn (bộ điều khiển bạn đang tách biệt), ⌃ + kéo từ "Tên hoạt động" để thoát. Bạn sẽ thấy segue thư giãn được tạo ở bước 1 trong cửa sổ bật lên. (Nếu bạn không nhìn thấy nó, hãy xem lại bước một). Chọn relaxToContainerVC: từ cửa sổ bật lên hoặc bất cứ điều gì bạn đặt tên cho phương thức của mình để kết nối bộ điều khiển nguồn với IBAction thư giãn.
3) Chọn segue trong phác thảo tài liệu của bộ điều khiển chế độ xem nguồn của bảng phân cảnh (nó sẽ được liệt kê ở gần cuối) và cung cấp cho nó một mã định danh .
4) Gọi segue thư giãn bằng phương pháp này từ nguồn bộ điều khiển xem , thay thế tên segue thư giãn của bạn.
// Mục tiêu C
[self performSegueWithIdentifier:@"unwindToContainerVC" sender:self];
// Swift
self.performSegueWithIdentifier("unwindToContainerVC", sender: self)
Lưu ý Sử dụng thuộc tính sourceViewContaptor của tham số segue trên phương thức relax để truy cập bất kỳ thuộc tính được hiển thị nào trên bộ điều khiển nguồn. Ngoài ra, lưu ý rằng khung xử lý loại bỏ bộ điều khiển nguồn. Nếu bạn muốn xác nhận điều này, hãy thêm một phương thức dealloc vào bộ điều khiển nguồn với thông điệp tường trình sẽ kích hoạt một khi nó đã bị giết. Nếu dealloc không bắn, bạn có thể có chu kỳ giữ lại.
(IBAction)unwindToContainerVC:(UIStoryboardSegue *)segue
ctrl+drag
từ ViewController
đến Exit
là vô cùng hữu ích. Cảm ơn!
bradleygriffith
Câu trả lời rất hay. Tôi đã thực hiện bước 10 và tạo một ảnh chụp màn hình để đơn giản hóa. Đây là một ảnh chụp màn hình trong Xcode 6.
unwind segue
thanh bên:[self performSegueWithIdentifier:@"unwindIdentifier" sender:self];
UIViewController
. Sau đó, giải pháp của bạn sẽ hoạt động
Tôi đã sử dụng [self dismissViewControllerAnimated: YES completion: nil];
sẽ đưa bạn trở lại cuộc gọi ViewController
.
Trích dẫn văn bản từ Ghi chú kỹ thuật của Apple về Unwind Segue: Để thêm một phân tách thư giãn sẽ chỉ được kích hoạt theo chương trình, hãy điều khiển + kéo từ biểu tượng trình điều khiển chế độ xem cảnh vào biểu tượng thoát của nó, sau đó chọn hành động thư giãn cho phân đoạn mới từ menu bật lên.
Câu trả lời của Vishal Chaudhry ở trên đã làm việc cho tôi. Tôi cũng sẽ thêm rằng để kích hoạt trình tự bằng cách sử dụng:
[self performSegueWithIdentifier:@"mySegueName" sender:self];
từ bên trong ViewContoder, bạn cũng phải chọn phân tách thư giãn trong Cảnh của ViewContoder trong bảng phân cảnh và trong chế độ xem thuộc tính trên RHS đảm bảo rằng trường Indentifier chứa tên người bạn đang đề cập đến trong mã ("mySegueName" trong ví dụ trên ).
Nếu bạn bỏ qua bước này, dòng trên sẽ đưa ra một ngoại lệ mà tên seque không được biết đến.
Giải pháp tương thích ngược sẽ hoạt động cho các phiên bản trước ios6, dành cho những người quan tâm:
- (void)unwindToViewControllerOfClass:(Class)vcClass animated:(BOOL)animated {
for (int i=self.navigationController.viewControllers.count - 1; i >= 0; i--) {
UIViewController *vc = [self.navigationController.viewControllers objectAtIndex:i];
if ([vc isKindOfClass:vcClass]) {
[self.navigationController popToViewController:vc animated:animated];
return;
}
}
}
Chuyển 4 :
1. Tạo một @IBAction với segue bên trong bộ điều khiển mà bạn muốn thư giãn để:
@IBAction func unwindToVC(segue: UIStoryboardSegue) {
}
2. Trong bảng phân cảnh, từ bộ điều khiển bạn muốn tách (thư giãn) từ ctrl + kéo từ dấu hiệu bộ điều khiển để thoát dấu và chọn phương thức bạn đã tạo trước đó:
3. Bây giờ bạn có thể nhận thấy rằng trong phác thảo tài liệu, bạn có dòng mới với tiêu đề "Unwind segue ....". Bây giờ bạn nên nhấp vào dòng này và mở trình kiểm tra thuộc tính để đặt định danh (trong trường hợp của tôi là relaxSegueIdentifier ).
4. Bạn sắp hoàn thành! Bây giờ bạn cần mở trình điều khiển xem bạn muốn thư giãn và tạo một số phương thức sẽ thực hiện segue. Ví dụ: bạn có thể thêm nút, kết nối nó với mã với @IBAction , sau đó bên trong IBAction này thêm perfromSegue (withIdentifier: sender :) phương thức:
@IBAction func unwindToSomeVCWithSegue(_ sender: UIButton) {
performSegue(withIdentifier: "unwindSegueIdentifier", sender: nil)
}
Vì vậy, đó là tất cả những gì bạn phải làm!
Đối với những người tự hỏi làm thế nào để làm điều này với các VC không được thiết lập thông qua bảng phân cảnh (những người đến với câu hỏi này từ việc tìm kiếm "lập trình" + "thư giãn segue").
Cho rằng bạn không thể thiết lập một segue thư giãn theo chương trình, giải pháp lập trình đơn giản nhất là gọi:
navigationController?.popToRootViewController(animated: true)
sẽ bật tất cả các bộ điều khiển xem trên ngăn xếp trở lại bộ điều khiển xem gốc của bạn.
Để bật chỉ bộ điều khiển xem trên cùng từ ngăn xếp điều hướng, sử dụng:
navigationController?.popViewController(animated: true)
FYI: Để câu trả lời của @ Vadim hoạt động với một hành động tuần tự thư giãn thủ công được gọi từ bên trong Bộ điều khiển xem, bạn phải đặt lệnh:
[self performSegueWithIdentifier:(NSString*) identifier sender:(id) sender];
bên trong của phương thức lớp overriden viewDidAppear như vậy:
-(void) viewDidAppear:(BOOL) animated
{
[super viewDidAppear: animated];
[self performSegueWithIdentifier:@"SomeSegueIdentifier" sender:self];
}
Nếu bạn đặt nó trong các phương thức ViewContoder khác như viewDidLoad hoặc viewWillAppear thì nó sẽ bị bỏ qua.
performSegueWithIdentfier
thực hiện chính xác điều đó: thực hiện phân tách từ một ViewContoder sang một trình điều khiển khác