在一个navigationVC中一步步向下,最后modal一个VC(名字叫lastVC)提示用户,在lastVC中,想要点击完成按钮跳转到navigationVC的根控制器。我的想法是先拿到lastVC的父控制器,然后调用父控制器的popToRootVC方法,最后dismiss掉lastVC,但是这样只能起到dismiss的作用,跳回到modal前的VC。还能想到一个用代理实现的方法,比较麻烦,或者用push  lastVC,去掉返回按钮(怎么去掉?重写pop方法?)。请大神指教,小弟先行谢过了。

解决方案 »

  1.   

    "调用父控制器的popToRootVC方法,最后dismiss掉lastVC"可行,你的意思是你失败了?
    像这样就行了:- (void)done {
        [self.presentingViewController.navigationController popToRootViewControllerAnimated:NO];
        [self dismissViewControllerAnimated:YES completion:nil];
    }如果不行的话你就要检查下你的presentedViewController,如果是一个Storyboard工程,默认创建的是一个UISplitViewController,这种情况下:- (void)done {
        UISplitViewController *splitVC = (UISplitViewController *)self.presentingViewController;
        [(UINavigationController *)splitVC.viewControllers.lastObject popToRootViewControllerAnimated:NO];
        [self dismissViewControllerAnimated:YES completion:nil];
    }如果是TabBarController也要做类似的转换。
      

  2.   

    先尝试一下这种方式:
    - (void)done {
        [self.presentingViewController.navigationController popToRootViewControllerAnimated:NO];
        [self dismissViewControllerAnimated:YES completion:nil];
    }如果不行,还可以尝试使用“通知”的方式。 让presenting的控制器(navigationcontroller  的最后一个控制器)添加观察者。modal 控制器在点击完成dismiss自己后发送通知。让presenting的控制器去popToRoot
      

  3.   

    如果上面的方法不行的话,那就吧,nav的所有VC都remove掉,也不返回 ,直接创建一个新的页面,将之前的都移除。