ios 如何在swift 3中以编程方式为barButtonItem设置动作?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/39768600/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-31 10:24:30  来源:igfitidea点击:

how to programmatically set action for barButtonItem in swift 3?

iosswiftselectorswift3uibarbuttonitem

提问by Bhanupriya

Here is what I used previously,

这是我之前用的

var barButtonItem = UIBarButtonItem(image: backImgs, style: UIBarButtonItemStyle.plain, target: self, action: Selector("menuButtonTapped:"))

But there is some syntax changes for Swift 3.

但是 Swift 3 有一些语法变化。

回答by Tony Vincent

ex:-

前任:-

navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action: #selector(addTapped))

回答by flame3

Summarize the mostly used method in Swift 3 for adding action to a barButton.

总结 Swift 3 中最常用的向 barButton 添加动作的方法。

  1. Barbutton with text

    navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action: #selector(addTapped))
    
  2. BarButton with your own image

    navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(named:"add"), style: .plain, target: self, action: #selector(addTapped))
    
  3. BarButton with system image

    navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addTapped))
    
  1. 带有文本的条形按钮

    navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action: #selector(addTapped))
    
  2. 带有您自己图像的 BarButton

    navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(named:"add"), style: .plain, target: self, action: #selector(addTapped))
    
  3. 带有系统映像的 BarButton

    navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addTapped))
    

回答by Onuray Sahin

If anyone is using customView:

如果有人正在使用customView

barButtonItem.customView?.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(onBarButtonItemClicked)))

回答by Nirav D

You just need to change your selectorsyntax 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从 Swift 3 开始的语法,您需要在函数调用中指定方法的第一个参数名称,以便像这样更改选择器。

#selector(menuButtonTapped(sender:))

And your method should be like this.

而你的方法应该是这样的。

func menuButtonTapped(sender: UIBarButtonItem) {

}

回答by Marco Aurelio Americo

One line of code on Swift 3 for iOS 10.1:

Swift 3 for iOS 10.1 的一行代码:

navigationController?.navigationBar.topItem?.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action: nil)

回答by Mihail Salari

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 }

回答by Mr. Tann

create an extension for barbutton item.

为 barbutton 项目创建一个扩展。

 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(){

   }
 }

And call it from viewDidLoad()

并从 viewDidLoad() 调用它

 self.navigationItem.addSettingButtonOnRight()

回答by Riajur Rahman

In Swift 3, you can add UIBarButtonItem like that,

Swift 3 中,您可以像这样添加 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

And handle button action like that,

并像这样处理按钮动作,

func buttonAction(_ sender: UIBarButtonItem) {

}

Hope it helps.

希望能帮助到你。

回答by pankaj nigam

for Swift 4 add in viewDidLoad:

对于 Swift 4 添加viewDidLoad

navigationItem.rightBarButtonItem = UIBarButtonItem(
    barButtonSystemItem: UIBarButtonSystemItem.add, 
    target: self, 
    action: #selector(addTransaction)
)

回答by ergunkocak

If someone is looking for a way to set the action on an existing button (Swift 5):

如果有人正在寻找一种在现有按钮上设置操作的方法 (Swift 5):

if let leftBarButtonItem = navigationItem.leftBarButtonItem {
    leftBarButtonItem.target = self
    leftBarButtonItem.action = #selector(onBack(_:))
}


@IBAction func onBack(_ sender: AnyObject) {
    _ = navigationController?.popViewController(animated: true)
}