我的UINavigationController中有3个UIViewControllers。 在某些方面,我想去rootViewController并从那里导航到一个新的UIViewController,并且它不能用于工作。
有什么建议吗?
- (IBAction)goToRootAndNavigateToViewController
{
[self.navigationController popToRootViewControllerAnimated:YES];
MyViewController *mvc = [[MyViewController alloc] init];
[self.navigationController pushViewController:mvc animated:YES];
[mvc release];
//This takes me to the rootViewController but it doesn't navigate to MyViewController
}
尝试使用performSelector:WithDelay:
- (void)goToRootAndNavigateToViewController
{
[self.navigationController popToRootViewControllerAnimated:YES];
[self performSelector:@selector(doSomething) withObject:nil afterDelay:10];
}
- (void)doSomething
{
MyViewController *mvc = [[MyViewController alloc] init];
[self.navigationController pushViewController:mvc animated:YES];
[mvc release];
}
答案 0 :(得分:0)
我相信popToRootViewController会占用完整的NSRunLoop。
您需要使用performSelector:withObject:afterDelay
等单独的功能推送您的下一个视图控制器。
或者您可以随时拨打[self.navigationController setViewControllers:]
来手动设置
答案 1 :(得分:0)
动画完成后,您需要推动mvc
控制器。第一个动画完成后尝试调用它(例如在- (void)viewDidAppear:(BOOL)animated
)
答案 2 :(得分:0)
我不知道您为什么会遇到此问题,但您可以尝试的一种解决方案是在根视图控制器的-viewDidAppear:
方法中推送新的视图控制器。
答案 3 :(得分:0)
我想这与使用- (IBAction)goToRootAndNavigateToViewController
的当前viewcontroller有关,一旦弹出就会以某种方式失去控制权。因此,使连续的陈述不起作用。
如果我是你,我会确保推送MyViewController
实例始终在您选择的rootViewController
处完成,而不是从当前将从UINavigationController
<弹出的viewcontroller完成强>可能被释放和解除分配。
您可能希望在- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
rootViewController
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
// Check the right condition for pushing MyViewController...
// if it's YES...
MyViewController *mvc = [[MyViewController alloc] init];
[self.navigationController pushViewController:mvc animated:YES];
[mvc release];
}
在此实现中,您可以推送MyViewController
实例。您必须事先做的一件事是使用某种条件标志,这将确保popToRootViewController
的情况正确然后推MyViewController