【发布时间】:2011-12-05 22:54:46
【问题描述】:
我的UIViewController 在导航堆栈中。我如何检测用户何时尝试弹出到上一个级别而不是在其上推送新的视图控制器?
我想在视图从堆栈中删除时发布通知,就好像用户点击了我没有的保存按钮。
【问题讨论】:
标签: ios uinavigationcontroller
我的UIViewController 在导航堆栈中。我如何检测用户何时尝试弹出到上一个级别而不是在其上推送新的视图控制器?
我想在视图从堆栈中删除时发布通知,就好像用户点击了我没有的保存按钮。
【问题讨论】:
标签: ios uinavigationcontroller
如果您使用的是UINavigationController,那么UINavigationBarDelegate 是委托类,它实现了以下方法。
推送项目
– navigationBar:shouldPushItem:
– navigationBar:didPushItem:
弹出项目
– navigationBar:shouldPopItem:
– navigationBar:didPopItem:
您可以将代码放入这些方法中,以便在视图从堆栈中弹出时执行。
【讨论】:
您可以在viewWillDisappear: 中做一些事情,还有UINavigationControllerDelegate protocol 有两种方法来检测视图何时将显示或已经显示。
【讨论】:
viewWillDisappear 是一个不太理想的地方,因为它有时会被调用,这对您的上下文没有意义。虽然您可以查看viewWillDisappear 中的导航堆栈,以查看您的视图在层次结构中的位置并执行适当的操作。我认为 UINaviationControllerDelegate 是一种更好的方法。
navigationController:didShowViewController 中工作:id viewControllerStack = [navigationController viewControllers]; if ( [viewControllerStack count] == [_navigationStack count] - 1 ) { ... } _navigationStack = viewControllerStack; 在willShow 中类似,只是不要设置_navigationStack。回旋是必要的,因为 viewControllers 在调用委托时已经更新。
UINavigationControllerDelegate 不会告诉您哪个视图控制器将隐藏/隐藏。当一个新的视图控制器 willShow/didShow 时,willHide/didHide 视图控制器可能已经从navigationController.viewControllers 中移除。