pushViewController仅适用于动画:YES

时间:2011-02-23 09:19:13

标签: iphone objective-c cocoa-touch

我在尝试将视图控制器推入堆栈时发现了一种奇怪的行为。以下工作正常:

[self.navigationController pushViewController:myViewController animated:YES];

但如果我将其更改为animated:NO它不再有效,似乎根本不会推动。我是在viewWillAppear执行此操作,但我也在viewDidAppear中尝试过,但没有运气。

任何可能导致此问题的想法?

由于

1 个答案:

答案 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];