关于viewWillAppear的一般说明?

时间:2012-08-07 09:01:50

标签: iphone objective-c ios xcode

我有一个关于viewWillAppear的一般性问题,我新推了一个视图考虑view1,现在为该方法调用viewWillAppear,如果view1推送另一个视图(view2)。现在如果view2被弹出view1的viewWillAppear再次被调用,我怎么才能知道它在哪种情况下被调用ie(是因为新推或弹出其他视图)。

希望我的问题是可以理解的:)

TIA

4 个答案:

答案 0 :(得分:0)

只需记住,只要您的视图显示在屏幕上(它将会显示),就会调用viewWillAppear方法。

如果再次弹出view2,你的view1将出现在屏幕上,这就是为什么再次调用viewWillAppear的原因。按下新视图控制器的方式相同,新的视图控制器将显示在屏幕上。在显示该视图之前,将调用该新视图控制器的viewWillAppear

我希望这是有道理的。

答案 1 :(得分:0)

坦率地说,我不知道如何恰当地确定这个条件。 你当然可以在view2的viewWillDisappear方法中设置view1的一些属性,并在view1的viewWillAppear中重新设置它。如:

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值是TRUEFALSE如果为真则表示视图第二次出现。

答案 3 :(得分:0)

根据您的具体情况,您要使用...

对于viewWillAppear / viewDidAppear

isBeingPresented
isMovingToParentViewController

对于viewWillDisappear / viewDidDisappear

isBeingDismissed
isMovingFromParentViewController