0

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

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

TIA

4

4 回答 4

0

根据您的上下文,您想使用...

对于 viewWillAppear/viewDidAppear

isBeingPresented
isMovingToParentViewController

对于 viewWillDisappear/viewDidDisappear

isBeingDismissed
isMovingFromParentViewController
于 2012-08-07T09:18:49.903 回答
0

坦率地说,我不知道如何适当地确定这种情况。您当然可以在 view2 的 viewWillDisappear 方法中设置 view1 的某些属性,然后在 view1 的 viewWillAppear 中重新设置它。比如:

视图1.m:

- (void) viewWillAppear ... {
... 

if (self.wasPopped) {...}

self.wasPopped = NO;
...
}

视图2.m:

- (void) viewWillDisappear {

view1.wasPopped = YES; //you would have to have a reference to view1 or fetch it from the navigation controller stack. 

}

但是,我坚信这不是你应该走的路。考虑将您的代码移动到 viewDidLoad 方法。viewDidLoad 仅在第一次调用 viewWillAppear 之前创建视图(控制器)时调用一次。

于 2012-08-07T09:11:40.983 回答
0

您可以使用BOOLvalue 并将其初始化为FALSE.InviewWillAppear制作该 bool 值TRUEviewWillAppear仅检查该 bool 值是否为真,TRUE或者FALSE如果它为真,则表示该视图第二次出现。

于 2012-08-07T09:13:59.530 回答
0

只需记住,只要您的视图出现在屏幕上(它将是可见的)viewWillAppear方法就会被调用。

在您的情况下,当再次弹出 view2 时,您的 view1 将出现在屏幕上,这viewWillAppear就是再次调用它的原因。同样,当您推送新的视图控制器时,新的视图控制器将显示在屏幕上。在显示该视图之前,viewWillAppear将调用该新视图控制器。

我希望这是有道理的。

于 2012-08-07T09:06:11.980 回答