我在尝试将视图控制器推入堆栈时发现了一种奇怪的行为。以下工作正常:
[self.navigationController pushViewController:myViewController animated:YES];
但如果我将其更改为animated:NO
它不再有效,似乎根本不会推动。我是在viewWillAppear
执行此操作,但我也在viewDidAppear
中尝试过,但没有运气。
任何可能导致此问题的想法?
由于
答案 0 :(得分:0)
问题很可能不是呼叫本身,而是呼叫的位置。尝试在UIButton上执行相同的操作,它应该100%工作。我注意到放置视图控制器操作例程,如presentModal ...和pushViewController ...有时在viewWill * viewDid *方法中不起作用。或者尝试使用performSelector:withObject:afterDelay在短暂延迟后使用这些函数进行调用,看看是否有效。
编辑:有几种方法可以做你想做的事。您可以直接修改导航控制器的导航堆栈,因此当您在视图N + 1中时,可以替换堆栈上的视图N(通过构建新的导航堆栈阵列并将其设置到导航控制器中),然后弹出,你将获得“弹回不同的视图控制器”的效果。你也可以从想要离开的视图控制器发出多个弹出和推送,但你必须要小心:
// pop back 2 controllers on the stack to the setup screen
//
// locally store the navigation controller since
// self.navigationController will be nil once we are popped
//
UINavigationController *navController = self.navigationController;
// retain ourselves so that the controller will still exist once it's popped off
//
[[self retain] autorelease];
// Pop back 2 controllers to the setup screen
//
[navController popViewControllerAnimated:NO];
[navController popViewControllerAnimated:YES];