我根据设计原因调用performSegueWithIdentifier。
- (void)showViewWithSegueIdentifier:(NSString *)segueIdentifier {
[self.navigationController.navigationController.topViewController performSegueWithIdentifier:segueIdentifier sender:self];
}
当我尝试处理prepareForSegue方法时,它仍未被调用。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
NSLog(@"Call");
}
是否可以从另一个控制器处理prepareForSegue?
答案 0 :(得分:0)
我相信你可以做你想做的事,虽然大多数时候这不是一个好主意。但是,你可能有充分的理由。
要弄清楚为什么它不起作用我会看看self.navigationController.navigationController.topViewController到底是什么。如果它是零将不会发生任何事情,它不会崩溃。猜测导航控制器没有导航控制器。
尝试
UIViewController *viewController = self.navigationController.navigationController.topViewController;
NSLog(@"This is my view controller: %@", viewController);
[viewController performSegueWithIdentifier:segueIdentifier sender:self];
并查看是否实际存在viewController。
修改强>
如果它不是nil,topViewController也有可能返回调用它的UIViewController。您可以在“这是我的视图控制器”日志下添加此日志,看看它是否与上面相同。
NSLog(@"This called prepareForSegue: %@", self);
虽然没有加起来的东西是你没有提到应用程序崩溃,你只是说它不起作用。这意味着无论你在调用prepareForSegue上,都必须具有相同的segue标识符。我相信视图控制器真的很疯狂,如果你调用一个不存在的segue并且崩溃应用程序,至少这是我记得的。但是,我已经做了一段时间,并且可能是错的。
我要看的最后一件事是viewDidLoad:您希望执行segue的控制器并将其记录下来,看它是否与“这是我的视图控制器”日志匹配。
我希望有所帮助,祝你好运。 =)