我有一个关于viewWillAppear的一般性问题,我新推了一个视图考虑view1,现在为该方法调用viewWillAppear,如果view1推送另一个视图(view2)。现在如果view2被弹出view1的viewWillAppear再次被调用,我怎么才能知道它在哪种情况下被调用ie(是因为新推或弹出其他视图)。
希望我的问题是可以理解的:)
TIA
答案 0 :(得分:0)
只需记住,只要您的视图显示在屏幕上(它将会显示),就会调用viewWillAppear
方法。
如果再次弹出view2,你的view1将出现在屏幕上,这就是为什么再次调用viewWillAppear
的原因。按下新视图控制器的方式相同,新的视图控制器将显示在屏幕上。在显示该视图之前,将调用该新视图控制器的viewWillAppear
。
我希望这是有道理的。
答案 1 :(得分:0)
view1.m:
- (void) viewWillAppear ... {
...
if (self.wasPopped) {...}
self.wasPopped = NO;
...
}
view2.m:
- (void) viewWillDisappear {
view1.wasPopped = YES; //you would have to have a reference to view1 or fetch it from the navigation controller stack.
}
但是,我坚信这不是你应该去的方式。考虑将代码移动到viewDidLoad方法。在第一次调用viewWillAppear之前创建视图(Controller)时,只调用一次viewDidLoad。
答案 2 :(得分:0)
您可以使用BOOL
值并将其初始化为FALSE
。在viewWillAppear
中设置该bool值TRUE
并在viewWillAppear
中仅检查该bool值是TRUE
或FALSE
如果为真则表示视图第二次出现。
答案 3 :(得分:0)
根据您的具体情况,您要使用...
对于viewWillAppear / viewDidAppear
isBeingPresented
isMovingToParentViewController
对于viewWillDisappear / viewDidDisappear
isBeingDismissed
isMovingFromParentViewController