【发布时间】:2014-03-31 20:42:26
【问题描述】:
我有两个视图控制器,它们是 VCA 和 VCB。我还有一个导航控制器,可以从 VCA 推送到 VCB。在VCA的prepareForSegue方法中,我有下面这行代码:
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"placePiece"]) {
NSLog(@"go to screen two");
}
}
在我的 VCB 中,我有以下两种方法:
- (void) willMoveToParentViewController:(UIViewController *)parent {
NSLog(@"will move back to screen one");
}
- (void) didMoveToParentViewController:(UIViewController *)parent {
NSLog(@"did move back to screen one");
}
我不明白的是,当我从 VCA 转到 VCB 时,我在控制台中收到以下消息:
2014-03-31 15:38:05.317 Li-Lab5[18865:60b] go to screen two
2014-03-31 15:38:05.318 Li-Lab5[18865:60b] will move back to screen one
2014-03-31 15:38:05.848 Li-Lab5[18865:60b] did move back to screen one
为什么会在这里调用 willMoveToParentViewController 和 didMoveToParentViewController 方法?
此外,是否有一种用于 VCA 和 VCB 的方法,使得当 VCA 转到 VCB 时,会调用 VCA 中的一个方法。当 VCB 回到 VCA 时,VCB 中的一个方法被调用。我只是想在这些方法中做一些阅读和写作。谢谢
【问题讨论】:
-
这两种方法并不像您认为的那样。父级不是发起推送的 viewController。父级是包含该 vc 的容器视图控制器,在您的情况下它是 navigationController。
-
那我该怎么做才能达到我想要的效果呢?
-
你可以使用
viewWillAppear:和viewDidAppear:。 -
@NobodyNada 有没有一种方法可以保证在我从 VCB 回到 VCA 时被调用?
-
@NobodyNada 你能把解决方案放在下面,以便我将其标记为正确答案。
标签: ios objective-c xcode