iOS - 奇怪的导航问题?

时间:2011-08-15 18:54:44

标签: ios uiviewcontroller uinavigationcontroller

我的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];
}

4 个答案:

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