尝试澄清:我希望能够区分以下两种情况:
在我正在处理的应用程序中,我需要知道是否由于其导航控制器被弹出而呈现了一个viewController。我查看了这个post并认为我通过简单地调用:
找到了解决方案BOOL wasReachedByPopping = !self.isMovingToParentViewController;
在我的viewWillAppear:
方法
这适用于大多数情况,但不幸的是,当通过tabBarController切换navigationControllers时会出现误报。我一直在考虑在我的viewController中添加一个名为pushNewController的BOOL
,在推送之前将其设置为YES。
self.pushedNewController = YES; // whenever I plan to push
这应该可以正常工作,但我真的很不高兴不得不把它作为像持久的BOOL状态一样凌乱的东西。任何人都有一个更好的方法来识别是否popCon到达了viewController?
编辑:我感谢下面的努力,但似乎他们只提供了我已经拥有的完全相同的功能。没有任何方法可以区分弹出或移动到标签栏导航。似乎我将不得不解决内部BOOL来存储viewController是否请求推送。我为以下任何感兴趣的人设置了以下方式:
- (void)viewDidDisappear:(BOOL)animated{
self.disappearedDueToPush = (self != [self.navigationController.viewControllers lastObject]);
}
答案 0 :(得分:1)
您是否查看过UINavigationControllerDelegate
种方法:
– navigationController:willShowViewController:animated:
– navigationController:didShowViewController:animated:
当视图控制器被按下或弹出导航堆栈时,会调用它们。
有关详细信息,请参阅Apple docs。
答案 1 :(得分:1)
您需要UINavigationControllerDelegate
,特别是didShowViewController:
方法。这是一个用法示例:
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if (viewController == self) {
NSLog(@"%@",viewController);
}
}
答案 2 :(得分:0)
如果是否弹出了viewcontroller,你可以使用这个条件!!!
if ([self.navigationController.viewControllers indexOfObject:viewControllerObj] == NSNotFound)
{
[self.navigationController pushViewController:viewControllerObj animated:YES];
}
else
{
[self.navigationController popToViewController:viewControllerObj animated:YES];
}
答案 3 :(得分:0)
试试这个......
if ([self.navigationController.viewControllers containsObject:<Your View Controller>])
{
NSLog(@"It is Pushed");
}
else
{
NSLog(@"It is Poped");
}
答案 4 :(得分:0)
所以回顾一下,似乎没有办法存储推送作为状态执行的事实。从下面提供的答案中,可以通过实施UINavigationControllerDelegate
并使用navigationController:willShowViewController:animated:
方法来设置此状态:
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
self.disappearedDueToPush = !(viewController == self);
}
如果实现委托似乎有点沉重(它对我有用),你可能会在viewDidDisappear方法中提出以下内容:
if (self != [self.navigationController.viewControllers lastObject]){
self.disappearedDueToPush = YES;
}
这对我来说更有意义,因为反向逻辑(以及对事实的检查)是在viewWillAppear方法中执行的。