【问题标题】:How to handle backBarButtonItem pressed?如何处理按下的 backBarButtonItem?
【发布时间】:2011-09-14 07:18:20
【问题描述】:

我几乎在所有应用程序中都这样做了,但是我在 navigationController 中堆叠了 3 个视图,我需要从第三个视图跳转到第一个视图。 据我了解,我只能通过 viewWillDisappear 做到这一点。但是,如果我尝试这种“跳转”,我将从第二个视图中获取 navigationController 面板,该面板带有导致异常/错误的导航按钮。

附:不要建议我让 leftBarButtonitem 看起来像 backBarButtonItem。这太难了,我不知道在哪里可以找到合适的图像。

【问题讨论】:

    标签: ios uinavigationcontroller pushviewcontroller popviewcontroller backbarbuttonitem


    【解决方案1】:

    据我所知,您别无选择,只能提供自己的UIBarButtonItem。默认情况下,不允许您中断 UINavigationController 的工作方式。也就是说,您不能覆盖后退按钮的行为。您必须提供自定义栏按钮项并将其设置为导航项的左侧栏按钮项。

    (顺便说一句,您正在寻找的这种行为可能表明导航模式不佳。后退按钮应该几乎总是按顺序退出导航层次结构。)

    【讨论】:

    • 我的另一个想法是在后退按钮上绘制一个透明按钮。它可能更简单,因为我不需要特殊图像,也不需要知道此按钮的确切大小。
    【解决方案2】:

    假设按照导航顺序,您的视图堆叠为 top -> 3 -> 2 -> 1 。当您处于此位置时,您的应用程序委托中可以有一个标志,显示当按下 backButton 时您将 doublePop 如下所示:(每当第三个视图按您提到的顺序出现时,您都会这样做)

    MyApplicationDelegate * del = [[UIApplication sharedApplication]delegate];
    del.doublePopEnabled = YES;
    [del release];
    

    在视图 2 中:

    - (void)viewWillAppear:(BOOL)animated {
    
        [super viewWillAppear:animated];
             MyApplicationDelegate * del = [[UIApplication sharedApplication]delegate];
             if(del.doublePopEnabled){
               //Asssuming you have a reference to your navigationController in your view 2
               del.doublePopEnabled = NO;
               [del.release]
               //Use animated as no if you don't want user to see doublePopping.
               self.navigationController popViewControllerAnimated:NO];
    
              }
     }
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2015-04-15
      • 1970-01-01
      • 2021-05-07
      • 1970-01-01
      • 2016-02-07
      • 2021-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多