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

时间:2016-02-24 22:21:14

标签: ios swift uinavigationcontroller uinavigationbar

我正在尝试在每个页面中设置一个自定义后退按钮,我在每个页面中重复相同的代码,如下所示;

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

我认为这是错误的方式。那么请你能说出最好的方法是什么?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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)

答案 2 :(得分:1)

这里有各种选择。

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)基本视图控制器类

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

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....

}

类别和基类都可以容纳popBack自定义方法,所以你最终会真正使用10个字符来获得这种行为......