我有两个视图控制器:RootViewController和DetailViewController
我在Storyboard中从Push Segue
定义DetailViewController
到RootViewController
,并将其ID设置为ShowDetailView
。然后我可以使用方法
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"ShowDetailView"]) {
}
}
我的问题:当我从RootViewController
辞职回DetailViewController
时,有没有办法调用方法(在RootViewController
中执行)?我正在使用以下代码辞职:
[self.navigationController popViewControllerAnimated: YES];
答案 0 :(得分:0)
默认情况下?不。您可以为此建立代表。
但相反,我认为您可以在RootViewController的-(void)viewWillAppear:(BOOL)animated
内执行所需的代码。
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self myMethodHere];
}
将在您的DetailViewController被重新签名后完全调用viewWillAppear
方法。
编辑: 就像说的那样,没有简单的方法可以做到这一点。也许是与代表真正合作的最佳方式。它真的必须在辞职后?如果它可以在之前,你可以获得rootViewController的引用并在resign之前执行你的方法,如下所示:
RootViewController *rootViewController = (RootViewController*) [[self.navigationController viewControllers] objectAtIndex:0];
[rootViewController someMethod];
[self.navigationController popViewControllerAnimated: YES];
如果你真的想要追求,那么你可以创建一个标志并使用上面的代码设置为yes,并在viewWillAppear中使用if来检查这个标志来执行你的方法,否则你无法从委托运行。