仅设置一次导航后退按钮(leftBarButtonItem)

Setting navigation back button (leftBarButtonItem) only once

我试图在几乎每个页面中设置一个自定义后退按钮,并且我在每个页面中重复相同的代码,就像这样;

let buttonItem = UIBarButtonItem(image: UIImage(named: "arrow_back"), style: UIBarButtonItemStyle.Plain, target: self, action:"popBack")
buttonItem.tintColor=UIColor.blackColor()
navigationItem.leftBarButtonItem = backButtonItem()

而且我认为这是错误的方法。那么,请问最好的方法是什么?

我通过在 UIViewController 上创建一个类别来完成此操作。在该文件中,我创建了一个名为 addBackButton 的方法,您可以将代码放入其中一次,然后在 .h 文件中公开该方法。然后在您的任何视图控制器子类中,您可以导入您的类别并调用 [self addBackButton];

我建议您创建一个自定义 UIButton class 并在每次需要时重复使用它。

class backButtonItem: UIBarButtonItem {

convenience init(target: AnyObject?) {
    self.init(image: UIImage(named: "arrow_back"), style: .Plain, target: target, action: "popBack")
    self.tintColor = UIColor.blackColor()
}}

使用时输入以下脚本即可:

navigationItem.leftBarButtonItem = backButtonItem(target: self)

这里有多种选择。

1) UIViewController 扩展

extension UIViewController {

    func brandedBackButton() {

        let buttonItem = UIBarButtonItem(image: UIImage(named: "back"), style: UIBarButtonItemStyle.Plain, target: self, action:"popBack")
        buttonItem.tintColor=UIColor.blackColor()

        navigationItem.leftBarButtonItem = buttonItem
    }
}

然后调用你的视图控制器

override func viewDidLoad() {
    super.viewDidLoad()

    brandedBackButton()
}

2) 基础视图控制器Class

你基本上会在你的控制器和 UIViewController 之间放置一个 class。

class BaseViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let buttonItem = UIBarButtonItem(image: UIImage(named: "back"), style: UIBarButtonItemStyle.Plain, target: self, action:"popBack")
        buttonItem.tintColor=UIColor.blackColor()

        navigationItem.leftBarButtonItem = buttonItem
     }
}

然后你将从这个 BaseViewController 继承而不是标准的 UIViewController。

class YourWhateverViewController: BaseViewController {

//implementation here....

}

类别和基础 class 也可以容纳 popBack 自定义方法,因此您最终实际上需要 10 个字符才能在任何地方实现此行为...