Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 弹出到导航堆栈中的第一个ViewController_Iphone_Ios_Uinavigationcontroller - Fatal编程技术网

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

Iphone 弹出到导航堆栈中的第一个ViewController,iphone,ios,uinavigationcontroller,Iphone,Ios,Uinavigationcontroller,在我的导航堆栈中,我有两个ViewController,它们被推送到导航堆栈中。在此基础上,我有一个PresentModalViewController作为rootviewcontroller,并在其上再推两个ViewController。因此,导航堆栈将如下所示 视图控制器 视图控制器 将ModalViewController呈现为rootviewcontroller 视图控制器 视图控制器 在最顶部的viewcontroller中,单击一个按钮,我想移动到最底部的viewcontroller

在我的导航堆栈中,我有两个ViewController,它们被推送到导航堆栈中。在此基础上,我有一个PresentModalViewController作为rootviewcontroller,并在其上再推两个ViewController。因此,导航堆栈将如下所示

视图控制器

视图控制器

将ModalViewController呈现为rootviewcontroller

视图控制器

视图控制器

在最顶部的viewcontroller中,单击一个按钮,我想移动到最底部的viewcontroller。应弹出或关闭介于两者之间的ViewController。这怎么可能。
我尝试过
解除Modalviewcontrolleranimated:
popToRootViewControllerAnimated:
,但没有任何成功。

尝试一下这个方法这会奏效的

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

您需要使用
ModalViewController
navigationController
popToRootViewControllerAnimated
。然后应使用DismissModalViewController激活的
命令。然后,您应该再次执行PoptorootViewController初始化

使用代理来解决此问题

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];
    }
A.h类
@协议MyDelegateClass
-(无效)家庭视图;
B.h类
@接口MyViewController:UIViewController
B.m类
-(void)didLoadHomeView
{
[self.navigationController-popToRootViewControllerAnimated:是];
}
C.h类
@接口MyCurrentViewController:UIViewController
{
id homeDelegate;
}
@属性(非原子,赋值)id homeDelegate;
C.m类
-(iAction)OnHome:(id)发件人{
[自我解散Modalviewcontrolleranimated:否];
if(self.homeDelegate){
[homeDelegate didLoadHomeView];
}
}


MyCurrentVIewController
类中的
OnHome:(id)sender
方法中,当前
RootViewController
ModalViewController
被解除。关闭
ModalViewController
后,我跳转到导航堆栈中当前的rootviewcontroller,即主视图(firstViewController)。上述代码在我的情况下非常有效。

表示您想将第五个控制器跳到第一个控制器,对吗?当我记录导航阵列时,我只看到3个ViewController,因为我已将presentmodalviewcontroller(viewController3)设置为我的rootviewcontroller。您需要更改[vcs计数]-2、3或4任意。如果导航阵列只有3个元素,怎么可能弹出到第4个viewcontrolleryen,我想你需要根据需要设置值。我想你不理解我的问题。我的presentmodalviewcontroller设置为rootviewcontroller,因此导航堆栈中缺少堆栈底部的前两个ViewController。