我正在努力为这个问题找到一个好的解决方案。在视图控制器的-viewWillDisappear:
方法中,我需要找到一种方法来确定是因为视图控制器被推到了导航控制器的堆栈上,还是因为视图控制器因为被弹出而消失了。
目前,我正在设置诸如isShowingChildViewController
之类的标志,但它正变得相当复杂。我认为我能检测到它的唯一方法是在-dealloc
方法中。
发布于 2009-11-30 04:36:20
您可以使用以下代码。
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
NSArray *viewControllers = self.navigationController.viewControllers;
if (viewControllers.count > 1 && [viewControllers objectAtIndex:viewControllers.count-2] == self) {
// View is disappearing because a new view controller was pushed onto the stack
NSLog(@"New view controller was pushed");
} else if ([viewControllers indexOfObject:self] == NSNotFound) {
// View is disappearing because it was popped from the stack
NSLog(@"View controller was popped");
}
}
当然,这是可能的,因为在调用viewWillDisappear时,UINavigationController的视图控制器堆栈(通过viewControllers属性公开)已经更新。
发布于 2013-06-26 01:41:54
我认为最简单的方法是:
- (void)viewWillDisappear:(BOOL)animated
{
if ([self isMovingFromParentViewController])
{
NSLog(@"View controller was popped");
}
else
{
NSLog(@"New view controller was pushed");
}
[super viewWillDisappear:animated];
}
Swift:
override func viewWillDisappear(animated: Bool)
{
if isMovingFromParent
{
print("View controller was popped")
}
else
{
print("New view controller was pushed")
}
super.viewWillDisappear(animated)
}
发布于 2010-01-29 01:39:01
如果您只是想知道视图是否正在弹出,当从控制器堆栈中删除时,我刚刚发现self.navigationController
在viewDidDisappear
中是nil
。所以这是一个简单的替代测试。
(这是我在尝试了各种其他扭曲方法后发现的。我很惊讶没有导航控制器协议来注册一个视图控制器来通知pops。您不能使用UINavigationControllerDelegate
,因为它实际上做了实际的显示工作。)
https://stackoverflow.com/questions/1816614
复制相似问题