我可以知道在viewWillAppear它被称为导航控制器popup后(后退button)?
假设我有UIViewController
A和B.用户通过push segue从A导航到B. 比用户按下后退button来到A.
现在viewWillAppear
的A被调用。 我可以知道在这里的代码,我来自后退button( navigationController popTo...
)而不是另一种方式? 而且不用在B视图控制器中编写特殊的代码。
嗯,也许你可以在viewWillAppear
使用self.isMovingToParentViewController
,看看文档 ,如果它是NO
那么意味着当前的视图控制器已经在导航堆栈上。
我想在视图控制器A中执行以下操作:
- (void) viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; if (_popping) { _popping = false; NSLog(@"BECAUSE OF POPPING"); } else { NSLog(@"APPEARING ANOTHER WAY"); } //keep stack size updated _stackSize = self.navigationController.viewControllers.count; .... } - (void) viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; _popping = self.navigationController.viewControllers.count > _stackSize; .... }
你正在做的是跟踪你的视图控制器(A)是否正在消失,因为视图控制器(B)正在被推动或由于其他原因。 然后(如果您没有修改子视图控制器的顺序),它应该准确地告诉您是否(A)由于导航控制器上的popup而出现。
添加一个BOOL属性到UIViewController
A:
@property (nonatomic) BOOL alreadyAppeared;
然后在你的viewWillAppear:
方法中,添加:
if (!self.alreadyAppeared) { self.alreadyAppeared = YES; // Do here the stuff you wanted to do on first appear }