弹出到导航堆栈中的第一个ViewController

时间:2012-06-12 09:36:42

标签: iphone ios uinavigationcontroller

在我的导航堆栈中,我有2个viewcontrollers,它们被推送到导航堆栈。在那我有一个PresentModalViewController作为rootviewcontroller,我推了2个以上的viewcontrollers。所以导航堆栈就像

  

ViewController

     

的ViewController

     

PresentModalViewController as rootviewcontroller

     

ViewController

     

的ViewController

从最顶层的viewcontroller,点击按钮,我想移动到最底层的viewcontroller。应该弹出或解除其间的视图控制器。这怎么可能。 我尝试了dismissModalViewControllerAnimated:popToRootViewControllerAnimated:但没有取得任何成功。

3 个答案:

答案 0 :(得分:0)

试试这个会起作用

            NSArray *vcs = [self.navigationController viewControllers];
            [self.navigationController popToViewController:[vcs objectAtIndex:[vcs count]-2] animated:YES];

答案 1 :(得分:0)

您需要popToRootViewControllerAnimated使用navigationController的{​​{1}}。然后你应该使用ModalViewController。然后你应该做dismissModalViewControllerAnimated

答案 2 :(得分:0)

使用代理来解决此问题。

Class A.h
@protocol MyDelegateClass
- (void)didLoadHomeView; 


Class B.h
@interface MyViewController : UIViewController<MyHomeViewDelegate>

Class B.m
- (void)didLoadHomeView
{
    [self.navigationController popToRootViewControllerAnimated:YES];
}

Class C.h
@interface MyCurrentViewController : UIViewController
{
    id <MyLoadHomeDelegate> homeDelegate; 
}
    @property (nonatomic,assign) id <MyLoadHomeDelegate>   homeDelegate;

Class C.m
-(IBAction) OnHome:(id)sender{
    [self dismissModalViewControllerAnimated:NO];
    if (self.homeDelegate) {
        [homeDelegate didLoadHomeView];
    }

}

当前ModalViewController RootViewControllerOnHome:(id)sender课程的MyCurrentVIewController方法中被驳回。在解除ModalViewController之后,我弹出到导航堆栈中的当前rootviewcontroller,这是主视图(firstViewController)。上面的代码在我的案例中完美无缺。