如何对 NavigationController 的返回按钮自定

2015-09-26  本文已影响3736人  chansey

假设需求时这样:

NavigationController下有2个视图,从A视图会Push到B视图,默认情况下,当显示视图B时,视图B的导航bar上会出现返回按钮,按钮标题文字默认为A视图的title,通常你也许会想自定义返回按钮的标题文字,也许你还想自定义处理点击返回按钮的业务逻辑。

那么,你可以通过下面的方式来实现(这里用的是Swift的实现方式):

方式1

在B视图的viewDidLoad中设置给NavigationController设置一个新的左边bar,添加一个处理点击返回按钮的方法

override func viewDidLoad {
    super.viewDidLoad()
    self.navigationItem.hidesBackButton = true
    let newBackButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Plain, target: self, action: "back:")
    self.navigationItem.leftBarButtonItem = newBackButton;
}

func back(sender: UIBarButtonItem) {
    // Perform your custom actions
    // ...
    // Go back to the previous ViewController
    self.navigationController?.popViewControllerAnimated(true)
}

方式2

这种方式主要展现如何添加点击后自定义业务逻辑,在B视图的viewWillDisappear中添加如下代码:

override func viewWillDisappear(animated : Bool) {
    super.viewWillDisappear(animated)
    
    if (self.isMovingFromParentViewController()){
        // Perform your custom actions
    }
}

这种方式利用视图变化状态来判断是否点击了返回按钮

以上2种方式都比容交易实现,方式1不仅包含自定返回按钮文字,而且能够添加自定义返回处理逻辑,而方式2中如果你需要修改标题还需要额外的实现,比如你可以在A视图的viewDidLoad方法中加入下面的代码:

self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "返回", style: UIBarButtonItemStyle.Plain, target: nil, action: nil)

好了,能够灵活的运用对你来说才有意义,希望你对有所帮助。

上一篇 下一篇

猜你喜欢

热点阅读