Here is what I used previously,
var barButtonItem = UIBarButtonItem(image: backImgs, style: UIBarButtonItemStyle.plain, target: self, action: Selector(\"menu
Make a UIBarButtonItem:
let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.done, target: self, action: #selector(LocationViewController.doneButtonClicked(_:)))
Add to NavigationItem:
self.navigationItem.rightBarButtonItem = rightButton
Associated function:
func doneButtonClicked(_ button:UIBarButtonItem!){
print("Done clicked")
}
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 }
Summarize the mostly used method in Swift 3 for adding action to a barButton.
Barbutton with text
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action: #selector(addTapped))
BarButton with your own image
navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(named:"add"), style: .plain, target: self, action: #selector(addTapped))
BarButton with system image
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addTapped))
If someone is looking for a way to set the action on an existing button (Swift 5):
if let leftBarButtonItem = navigationItem.leftBarButtonItem {
leftBarButtonItem.target = self
leftBarButtonItem.action = #selector(onBack(_:))
}
@IBAction func onBack(_ sender: AnyObject) {
_ = navigationController?.popViewController(animated: true)
}
You just need to change your selector
syntax as of from Swift 3 you need to specify the first parameter name of method in your function call so change your selector like this.
#selector(menuButtonTapped(sender:))
And your method should be like this.
func menuButtonTapped(sender: UIBarButtonItem) {
}
If anyone is using customView
:
barButtonItem.customView?.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(onBarButtonItemClicked)))