【问题标题】:How to tell when back button is pressed in a UINavigationControllerStack如何判断 UINavigationController 堆栈中何时按下后退按钮
【发布时间】:2011-02-02 05:41:58
【问题描述】:

是否可以检查 UINavigationController 堆栈中何时按下后退按钮?我尝试向 self.navigationItem.backBarButtonItem 添加动作和目标,但无济于事。

有人有解决办法吗?

【问题讨论】:

  • 当您更改 backBarButtonItem 时,请确保您在要返回 /to/ 的控制器上更改它,而不是刚刚被推送的控制器。此外,您只能设置自定义标题或自定义视图。如果设置自定义图像,则没有效果。最后,您可以使用下面 Noah 的建议,但让自己成为导航控制器本身的委托,并响应 didPopViewController: 系列方法。
  • UINavigationControllerDelegate 没有 will/didPopViewController 方法,只有 will/didShowViewController。

标签: iphone objective-c uinavigationcontroller


【解决方案1】:

你可以试试我的方法:

在你的 ViewController 中写入:

UIBarButtonItem *backBt = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"imageNameOfBackButton"] style:UIBarButtonItemStyleBordered target:self action:@selector(backBt_touch:)];
self.navigationItem.leftBarButtonItem = backBt;

以及动作方法:

- (void)backBt_touch:(id)sender {
  [self.navigationController popViewControllerAnimated:YES];
}

你必须拍一张你想要的后退按钮的照片。

viewController弹出时隐藏后退按钮的动画和iOS的不一样!

P/s: 我已经从模拟器中得到它。希望有用! :)

【讨论】:

    【解决方案2】:

    解决此问题的一种方法是覆盖 UIViewController 中的viewWillDisappear,当按下后退按钮时可见:

    - (void)viewWillDisappear:(BOOL)animated {
        if (self.isMovingFromParentViewController) {
            // handle back button press
        }
    }
    

    显然这不会直接拦截按下后退按钮本身,但它让您有机会在那时执行逻辑。

    【讨论】:

    • 这是一个想法,但是... viewWillDisappear 在太多情况下会被调用。这不是完美的方式!
    • 我可能遗漏了一些东西,但我认为检查 self.isMovingFromParentViewController 可以解决这个问题。
    • @mon4goos self.isMovingFromParentViewController 不起作用
    • 它确实有效,而且比使用不显示返回箭头的self.navigationItem.leftBarButtonItem 更好。这个答案无缘无故被降级了。
    猜你喜欢
    • 2011-03-18
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 2013-05-12
    • 1970-01-01
    • 2012-02-15
    相关资源
    最近更新 更多