在ios中保持视图控制器的第一个状态

Posted

技术标签:

【中文标题】在ios中保持视图控制器的第一个状态【英文标题】:Maintain the first state of the view controller in ios 【发布时间】:2015-05-26 10:28:45 【问题描述】:

我有三个 UIViewController。当我从控制器 A 到 B 然后 B 到 C 然后再到 B 时。控制器 B 的导航栏的后退按钮将我带到 C。有没有办法确保 B 的导航栏无论我从 B 到 C 再从 C 到 B 多少次,后退按钮都会带我到 A。这可能吗?

【问题讨论】:

当用户从 C 转到 B 时,你是在推送新的 B 视图控制器,而不是弹回之前的控制器吗? 请添加一些用于导航目的的代码 sn-p。 如果 A 是你的根视图控制器,你可以通过捕获后退按钮来使用 popToRootViewControllerAnimated。 @johnpatrickmorgan 我正在推动一个新的 B 视图控制器.. 【参考方案1】:

在这种情况下,您必须使用带有自定义方法的自定义后退按钮 -

 UIBarButtonItem *barBtnItem = [[UIBarButtonItem alloc]initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(backToViewController)];
        self.navigationItem.backBarButtonItem = barBtnItem;


   - (void)backToViewController

    int index =-1;
    for (UIViewController *controller in self.navigationController.viewControllers) 

        index = index +1;

        if ([controller isKindOfClass:[self class]]) 

            if (index>0)
            
                [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:index-1]
                                                      animated:YES];
            

            break;
        
    

【讨论】:

【参考方案2】:

将控制器 A 设置为导航的根控制器和后退按钮的单击事件调用 popToRootViewController 方法而不是 popViewController

注意: 这里我假设您使用了自定义栏按钮项。

【讨论】:

以上是关于在ios中保持视图控制器的第一个状态的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 状态恢复 - 获取以前恢复的视图控制器

Swift iOS - 即使我隐藏它,导航栏也不会保持隐藏状态

IOS Interface Builder - 在单个视图控制器场景中管理多个视图

保持导航控制器的状态并且只改变视图

iOS - 如何推送到视图控制器并在返回时保持正确的“视图堆栈”

切换到视图控制器 B 后如何保持视图控制器 A 的状态?