如何从另一个NavigationController处理prepareForSegue?

时间:2015-02-07 02:00:54

标签: ios objective-c storyboard segue handle

我根据设计原因调用performSegueWithIdentifier。

- (void)showViewWithSegueIdentifier:(NSString *)segueIdentifier {

    [self.navigationController.navigationController.topViewController performSegueWithIdentifier:segueIdentifier sender:self];

}

当我尝试处理prepareForSegue方法时,它仍未被调用。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

  NSLog(@"Call");

}

是否可以从另一个控制器处理prepareForSegue?

1 个答案:

答案 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的控制器并将其记录下来,看它是否与“这是我的视图控制器”日志匹配。

我希望有所帮助,祝你好运。 =)