0

我有两个视图控制器:RootViewController 和 DetailViewController

我在 Storyboard 中定义了一个Push Segueto DetailViewControllerfrom RootViewController,并将其 ID 设置为ShowDetailView. 然后我可以使用该方法在 DetailViewController 中设置各种变量

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"ShowDetailView"]) {
    }
}

我的问题:当我从back toRootViewController辞职时,有没有办法调用方法(在 中执行) ?我正在使用以下代码辞职:DetailViewControllerRootViewController

[self.navigationController popViewControllerAnimated: YES];
4

1 回答 1

0

默认?不,您可以为此建立一个委托。

但相反,我认为您可以在-(void)viewWillAppear:(BOOL)animatedRootViewController 中执行您想要的代码。

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    [self myMethodHere];
}

viewWillAppear方法将在您的 DetailViewController 被辞职后准确调用。


编辑:就像说的那样,没有简单的方法可以做到这一点。也许最好的方式是真正与代表在一起。真的必须在辞职之后吗?如果可以在之前,您可以获取 rootViewController 的引用并在辞职之前执行您的方法,如下所示:

 RootViewController *rootViewController = (RootViewController*) [[self.navigationController viewControllers] objectAtIndex:0];
[rootViewController someMethod];
[self.navigationController popViewControllerAnimated: YES];

如果你真的想要,那么你可以使用上面的代码创建一个标志并设置为 yes,并使用 viewWillAppear 中的 if 检查这个标志来执行你的方法,否则你不能从委托中运行。

于 2013-07-31T01:24:55.933 回答