我有一个关于 viewWillAppear 的一般性问题,我新推送了一个视图,考虑 view1,如果 view1 推送了另一个视图(view2),现在该方法调用 viewWillAppear。现在如果 view2 被弹出 view1 的 viewWillAppear 被再次调用,我怎么知道在哪种情况下它被称为 ie (是因为新推送或弹出其他视图)。
希望我的问题可以理解:)
TIA
我有一个关于 viewWillAppear 的一般性问题,我新推送了一个视图,考虑 view1,如果 view1 推送了另一个视图(view2),现在该方法调用 viewWillAppear。现在如果 view2 被弹出 view1 的 viewWillAppear 被再次调用,我怎么知道在哪种情况下它被称为 ie (是因为新推送或弹出其他视图)。
希望我的问题可以理解:)
TIA
根据您的上下文,您想使用...
对于 viewWillAppear/viewDidAppear
isBeingPresented
isMovingToParentViewController
对于 viewWillDisappear/viewDidDisappear
isBeingDismissed
isMovingFromParentViewController
坦率地说,我不知道如何适当地确定这种情况。您当然可以在 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 之前创建视图(控制器)时调用一次。
您可以使用BOOL
value 并将其初始化为FALSE
.InviewWillAppear
制作该 bool 值TRUE
并viewWillAppear
仅检查该 bool 值是否为真,TRUE
或者FALSE
如果它为真,则表示该视图第二次出现。
只需记住,只要您的视图出现在屏幕上(它将是可见的)viewWillAppear
方法就会被调用。
在您的情况下,当再次弹出 view2 时,您的 view1 将出现在屏幕上,这viewWillAppear
就是再次调用它的原因。同样,当您推送新的视图控制器时,新的视图控制器将显示在屏幕上。在显示该视图之前,viewWillAppear
将调用该新视图控制器。
我希望这是有道理的。