【问题标题】:return to the main menu from any UIViewcontroller从任何 UIViewcontroller 返回主菜单
【发布时间】:2012-01-13 21:29:56
【问题描述】:

我想知道是否有任何方法可以从UIViewController 返回,例如向后退 3-4 步,我有一个主屏幕,它将通过presentModalViewController 导航到其他UIViewController,在下一个视图中,它将有一个UINavigationBar,它将导航到 4-5 级深度。我想放一个按钮,让用户直接回到家,而不用返回他输入的所有视图。

提前谢谢。

【问题讨论】:

    标签: objective-c ios4 uiviewcontroller uinavigationbar


    【解决方案1】:

    让您的根级视图控制器注册为通知的观察者,例如“POP_TO_ROOT”。当它收到此通知时,调用一个方法来关闭您的模态视图控制器(或堆栈中的第一个)。

    在您的视图控制器堆栈中,任何 4 或 5 级视图都可以发布通知“POP_TO_ROOT”。

    编辑:添加代码

    在调用 presentModalViewController 之前,在主“屏幕”中执行以下操作:

        [[NSNotificationCenter defaultCenter] addObserver:self 
                                                 selector:@selector(handlePopToRoot) 
                                                     name:@"POP_TO_ROOT"
                                                   object:nil];
    

    并添加此方法:

     - (void) handlePopToRoot {
         [[NotificationCenter defaultCenter] removeObserver:self 
                                                       name:@"POP_TO_ROOT" 
                                                     object:nil];
         [self.navigationController dismissModalViewControllerAnimated: YES]; 
     }
    

    然后,在视图控制器层次结构的深处,当您想要完全弹出时, 您只需要发布通知:

     [[NSNotificationCenter defaultCenter] postNotification:@"POP_TO_ROOT" object:nil];
    

    【讨论】:

    • 我没有得到你的解决方案,你能发布一些代码让我清楚吗?
    • 感谢您的快速回复,感谢您提供的代码,在这之间,我不使用导航控制器,我只是使用 [self presentModelViewController:Viewname animated:YES];
    【解决方案2】:

    如果我正确理解您的问题,您正在以模态方式从“主视图控制器”呈现导航控制器(附有根视图控制器),并且您希望能够返回到“主视图控制器” ”。

    因为您将始终拥有指向导航控制器的指针,所以您应该能够调用 dismissModalViewControllerAnimated: 来自您的任何视图控制器,它会将您带回主视图控制器。

        [[self.navigationController parentViewController] dismissModalViewControllerAnimated:YES]
    

    【讨论】:

    • 这将带我返回一个视图,我想让它带我返回例如 4 个视图。
    【解决方案3】:

    将根视图控制器保存在某个属性中并调用:
    - (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated

    【讨论】:

    • 我的主菜单不是根控制器,所以我不能使用 self.navigationController
    • 用新的细节更新了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多