【问题标题】:iOS Controlling Back Button from Navigation ControlleriOS 从导航控制器控制返回按钮
【发布时间】:2014-01-21 18:15:03
【问题描述】:

我有三种观点: 1)我的标签栏上的首字母 2) 从#1 开始的视图 3) 从#2 开始的视图

App 的正常使用是从#1 开始,到#2,然后是#3,然后总是回到#2。我希望#2 的后退按钮始终返回到#1。但是,在输入#3 并返回到#2 后,后退按钮转到#3(而不是我想要#1)。我目前使用 push segues。有关如何更新此内容的任何想法?

【问题讨论】:

  • 你怎么回到2?您应该从堆栈中弹出 3。听起来您正在将新的 2 推入堆栈
  • @Paul.s 从 3 开始返回 2。所以是的,你是对的,我正在将一个新的 2 推入堆栈。如何从堆栈中弹出 3 个?
  • 如果是我,我可能会让 3 回叫 2 说“我完成了”,此时 2 将决定如何解雇 3,因为它知道它是如何呈现的(navigationController/Modal /其他)。在这种情况下,2 只会调用 [self.navigationController popViewControllerAnimated:YES]
  • @Paul.s popViewControllerAnimated:YES 只是从 2 转回 1。当我把它放入 3 时,程序崩溃
  • 如果你把它放在 3 中,它不应该崩溃(如果你从 3 到 2,它应该在这个位置)。确保您的项目中没有任何“向后”转场(从 3 到 2 或 2 到 1)。崩溃时是否收到错误消息?如果有,请发布。

标签: ios uinavigationcontroller storyboard segue


【解决方案1】:

使用:

popToRootViewControllerAnimated:

代替:

popViewControllerAnimated:

【讨论】:

    【解决方案2】:

    我最终解决了使用此链接Removing viewcontrollers from navigation stack 并用 if 语句包围它以检测至少 2 个视图控制器:

     - (void) viewWillDisappear:(BOOL)animated{
    NSMutableArray *navigationArray = [[NSMutableArray alloc] initWithArray: self.navigationController.viewControllers];
    int i = [navigationArray count];
    
    // [navigationArray removeAllObjects];    // This is just for remove all view controller from navigation stack.
    if (i > 1){
        NSLog(@"count: %d", i);
        [navigationArray removeObjectAtIndex: 1];  // You can pass your index here
        self.navigationController.viewControllers = navigationArray;
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-10
      相关资源
      最近更新 更多