在重新调用viewcontroller时调用特定方法

时间:2013-07-31 01:18:47

标签: iphone ios objective-c uiviewcontroller

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

我在Storyboard中从Push Segue定义DetailViewControllerRootViewController,并将其ID设置为ShowDetailView。然后我可以使用方法

在DetailViewController中设置各种变量
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"ShowDetailView"]) {
    }
}

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

[self.navigationController popViewControllerAnimated: YES];

1 个答案:

答案 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来检查这个标志来执行你的方法,否则你无法从委托运行。