仅设置一次导航后退按钮(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 个字符才能在任何地方实现此行为...
我试图在几乎每个页面中设置一个自定义后退按钮,并且我在每个页面中重复相同的代码,就像这样;
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 个字符才能在任何地方实现此行为...