如何以编程方式为 swift 3 中的 barButtonItem 设置操作?
How to programmatically set action for barButtonItem in swift 3?
这是我之前用的,
var barButtonItem = UIBarButtonItem(image: backImgs, style: UIBarButtonItemStyle.plain, target: self, action: Selector("menuButtonTapped:"))
但是 Swift 3.
有一些语法变化
例如:-
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action: #selector(addTapped))
从 Swift 开始,您只需更改 selector
语法 3 您需要在函数调用中指定方法的第一个参数名称,因此请像这样更改您的选择器。
#selector(menuButtonTapped(sender:))
而你的方法应该是这样的。
func menuButtonTapped(sender: UIBarButtonItem) {
}
let barButtonItem = UIBarButtonItem(image: UIImage(named: "backImgs"),
style: .plain,
target: self,
action: #selector(menuButtonTapped))
// Adding button to navigation bar (rightBarButtonItem or leftBarButtonItem)
self.navigationItem.rightBarButtonItem = barButtonItem
// Private action
@objc fileprivate func menuButtonTapped() { // body method here }
Swift 3 for iOS 10.1 的一行代码:
navigationController?.navigationBar.topItem?.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action: nil)
总结 Swift 3 中最常用的向 barButton 添加操作的方法。
带文本的条形按钮
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action: #selector(addTapped))
带有您自己的图片的条形按钮
navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(named:"add"), style: .plain, target: self, action: #selector(addTapped))
带有系统图像的条形按钮
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addTapped))
制作一个 UIBarButtonItem:
let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.done, target: self, action: #selector(LocationViewController.doneButtonClicked(_:)))
添加到 NavigationItem:
self.navigationItem.rightBarButtonItem = rightButton
关联函数:
func doneButtonClicked(_ button:UIBarButtonItem!){
print("Done clicked")
}
如果有人在使用 customView
:
barButtonItem.customView?.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(onBarButtonItemClicked)))
为条形按钮项目创建一个扩展。
extension UINavigationItem {
func addSettingButtonOnRight(){
let button = UIButton(type: .Custom)
button.setTitle("setting", forState: .Normal)
button.titleLabel?.font = UIFont.systemFontOfSize(15.0)
button.layer.cornerRadius = 5
button.backgroundColor = UIColor.grayColor()
button.frame = CGRect(x: 0, y: 0, width: 100, height: 25)
button.addTarget(self, action: #selector(gotSettingPage), forControlEvents: UIControlEvents.TouchUpInside)
let barButton = UIBarButtonItem(customView: button)
self.rightBarButtonItem = barButton
}
func gotSettingPage(){
}
}
并从 viewDidLoad() 调用它
self.navigationItem.addSettingButtonOnRight()
在Swift3中,你可以这样添加UIBarButtonItem,
let addButton = UIBarButtonItem(image:UIImage(named:"your_icon_name"), style:.plain, target:self, action:#selector(YourControllerName.buttonAction(_:)))
addButton.tintColor = UIColor.white
self.navigationItem.rightBarButtonItem = addButton
然后像那样处理按钮操作,
func buttonAction(_ sender: UIBarButtonItem) {
}
希望对您有所帮助。
for Swift 4 添加 viewDidLoad
:
navigationItem.rightBarButtonItem = UIBarButtonItem(
barButtonSystemItem: UIBarButtonSystemItem.add,
target: self,
action: #selector(addTransaction)
)
如果有人正在寻找在现有按钮上设置操作的方法 (Swift 5):
if let leftBarButtonItem = navigationItem.leftBarButtonItem {
leftBarButtonItem.target = self
leftBarButtonItem.action = #selector(onBack(_:))
}
@IBAction func onBack(_ sender: AnyObject) {
_ = navigationController?.popViewController(animated: true)
}
在Swift5
//For righter button item
let rightBtn = UIBarButtonItem(image: UIImage(named: "rightmenu"), style: .plain, target: self, action: #selector(onClickMethod))//Change your function name and image name here
self.navigationItem.rightBarButtonItem = rightBtn
//self.navigationItem.rightBarButtonItem = [rightBtn, anotherBtn] //If you want to add more buttons add like this
//For left bar button item
let leftBtn = UIBarButtonItem(image: UIImage(named: "rightmenu"), style: .plain, target: self, action: #selector(onClickMethod)) //Change your function name and image name here
self.navigationItem.leftItemsSupplementBackButton = true
self.navigationItem.leftBarButtonItem = leftBtn
//self.navigationItem.leftBarButtonItems = [leftBtn, anotherBtn] //If you want to add more buttons add like this
//This is your function name
@objc func onClickMethod() {
print("Left bar button item")
}
这是我之前用的,
var barButtonItem = UIBarButtonItem(image: backImgs, style: UIBarButtonItemStyle.plain, target: self, action: Selector("menuButtonTapped:"))
但是 Swift 3.
有一些语法变化例如:-
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action: #selector(addTapped))
从 Swift 开始,您只需更改 selector
语法 3 您需要在函数调用中指定方法的第一个参数名称,因此请像这样更改您的选择器。
#selector(menuButtonTapped(sender:))
而你的方法应该是这样的。
func menuButtonTapped(sender: UIBarButtonItem) {
}
let barButtonItem = UIBarButtonItem(image: UIImage(named: "backImgs"),
style: .plain,
target: self,
action: #selector(menuButtonTapped))
// Adding button to navigation bar (rightBarButtonItem or leftBarButtonItem)
self.navigationItem.rightBarButtonItem = barButtonItem
// Private action
@objc fileprivate func menuButtonTapped() { // body method here }
Swift 3 for iOS 10.1 的一行代码:
navigationController?.navigationBar.topItem?.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action: nil)
总结 Swift 3 中最常用的向 barButton 添加操作的方法。
带文本的条形按钮
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action: #selector(addTapped))
带有您自己的图片的条形按钮
navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(named:"add"), style: .plain, target: self, action: #selector(addTapped))
带有系统图像的条形按钮
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addTapped))
制作一个 UIBarButtonItem:
let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.done, target: self, action: #selector(LocationViewController.doneButtonClicked(_:)))
添加到 NavigationItem:
self.navigationItem.rightBarButtonItem = rightButton
关联函数:
func doneButtonClicked(_ button:UIBarButtonItem!){
print("Done clicked")
}
如果有人在使用 customView
:
barButtonItem.customView?.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(onBarButtonItemClicked)))
为条形按钮项目创建一个扩展。
extension UINavigationItem {
func addSettingButtonOnRight(){
let button = UIButton(type: .Custom)
button.setTitle("setting", forState: .Normal)
button.titleLabel?.font = UIFont.systemFontOfSize(15.0)
button.layer.cornerRadius = 5
button.backgroundColor = UIColor.grayColor()
button.frame = CGRect(x: 0, y: 0, width: 100, height: 25)
button.addTarget(self, action: #selector(gotSettingPage), forControlEvents: UIControlEvents.TouchUpInside)
let barButton = UIBarButtonItem(customView: button)
self.rightBarButtonItem = barButton
}
func gotSettingPage(){
}
}
并从 viewDidLoad() 调用它
self.navigationItem.addSettingButtonOnRight()
在Swift3中,你可以这样添加UIBarButtonItem,
let addButton = UIBarButtonItem(image:UIImage(named:"your_icon_name"), style:.plain, target:self, action:#selector(YourControllerName.buttonAction(_:)))
addButton.tintColor = UIColor.white
self.navigationItem.rightBarButtonItem = addButton
然后像那样处理按钮操作,
func buttonAction(_ sender: UIBarButtonItem) {
}
希望对您有所帮助。
for Swift 4 添加 viewDidLoad
:
navigationItem.rightBarButtonItem = UIBarButtonItem(
barButtonSystemItem: UIBarButtonSystemItem.add,
target: self,
action: #selector(addTransaction)
)
如果有人正在寻找在现有按钮上设置操作的方法 (Swift 5):
if let leftBarButtonItem = navigationItem.leftBarButtonItem {
leftBarButtonItem.target = self
leftBarButtonItem.action = #selector(onBack(_:))
}
@IBAction func onBack(_ sender: AnyObject) {
_ = navigationController?.popViewController(animated: true)
}
在Swift5
//For righter button item
let rightBtn = UIBarButtonItem(image: UIImage(named: "rightmenu"), style: .plain, target: self, action: #selector(onClickMethod))//Change your function name and image name here
self.navigationItem.rightBarButtonItem = rightBtn
//self.navigationItem.rightBarButtonItem = [rightBtn, anotherBtn] //If you want to add more buttons add like this
//For left bar button item
let leftBtn = UIBarButtonItem(image: UIImage(named: "rightmenu"), style: .plain, target: self, action: #selector(onClickMethod)) //Change your function name and image name here
self.navigationItem.leftItemsSupplementBackButton = true
self.navigationItem.leftBarButtonItem = leftBtn
//self.navigationItem.leftBarButtonItems = [leftBtn, anotherBtn] //If you want to add more buttons add like this
//This is your function name
@objc func onClickMethod() {
print("Left bar button item")
}