我有3个MVC,在这里命名为A,B,C。
A是主要的MVC,按钮“Menu”通过popover segue连接到B.
A也连接到C,手动显示segue。
B是一个弹出窗口MVC,按钮“Detail”连接到A并带有展开segue。
C是带有详细信息的详细MVC。
在A.的展开函数中,我调用performSegueWithIdentifier来显示C.
预期的行为是
但运行我得到的应用程序。
C出现并突然消失,这不是我想要的。
其他一些信息
答案 0 :(得分:6)
似乎unwind函数不是调用performSegueWithIdentifier的正确位置。
在调用展开功能后,UIKit会弹出视图控制器。
因此,在unwind功能中推送新视图控制器将快速弹出。
解决方案是延迟performSegueWithIdentifier。
解决方案1:不工作
添加bool实例并在viewDidAppear中使用此实例来确定我们是否执行segue。
如果B控制器是一个弹出窗口,不会工作。 B弹出消失后,不会为A控制器调用viewDidAppear。
解决方案2:工作
将performSegueWithIdentifier推入主队列。
@IBAction func unwind(segue : UIStoryboardSegue) {
dispatch_async(dispatch_get_main_queue()) {
self.performSegueWithIdentifier("SomeSegue", sender: self)
}
}
答案 1 :(得分:0)
您可以通过使用以下代码为其分配故事板ID轻松地在viewControllers之间切换。
// you need to create UIStoryboard object by giving name of your storyboard
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
// here you need to create storyboard ID of perticular view where you need to navigate your app
UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"viewContIdentifire"];
// if use presentViewController this will not enables you to go back to previous view
[self presentViewController:vc animated:NO completion:nil];
**// OR**
// using pushViewController lets you to go back to the previous view
[self.navigationController pushViewController:vc animated:YES];
或者您仍然希望使用segue,因此必须通过在下面实施其委托方法来控制它们,以便它们相应地执行。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"segueName"]) {
// perform segue
[self performSegueWithIdentifier:@"SegueIdentifier" sender:self];
}
}
快乐编码.. :)