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

Bha*_*iya 46 selector uibarbuttonitem ios swift swift3

这是我以前用过的,

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

但是Swift 3有一些语法更改.提前感谢.

Ton*_*ent 103

例如: -

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

  • 我将单击向上箭头,但它位于69,所以我们暂时将其保留。 (2认同)

fla*_*me3 55

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

  1. 巴布通与文本

    navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action: #selector(addTapped))
    
    Run Code Online (Sandbox Code Playgroud)
  2. BarButton有自己的形象

    navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(named:"add"), style: .plain, target: self, action: #selector(addTapped))
    
    Run Code Online (Sandbox Code Playgroud)
  3. BarButton与系统图像

    navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addTapped))
    
    Run Code Online (Sandbox Code Playgroud)


Onu*_*hin 31

如果有人使用customView:

barButtonItem.customView?.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(onBarButtonItemClicked)))
Run Code Online (Sandbox Code Playgroud)


Nir*_*v D 14

您只需selector要从Swift 3 更改语法,您需要在函数调用中指定方法的第一个参数名称,因此请更改您的选择器.

#selector(menuButtonTapped(sender:))
Run Code Online (Sandbox Code Playgroud)

你的方法应该是这样的.

func menuButtonTapped(sender: UIBarButtonItem) {

}
Run Code Online (Sandbox Code Playgroud)

  • @Bhanupriya 是的,你可以,但为此你需要使用带有选择器 `#selector(menuButtonTapped(_:))` 的 `_`,并且还需要将 `_` 作为第一个参数添加到你的方法中,比如 `func menuButtonTapped(_ sender: UIBarButtonItem) {` 您必须使用的任一选项,否则它将不起作用。 (2认同)

小智 12

适用于iOS 10.1的Swift 3上的一行代码:

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


Mih*_*ari 8

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 }
Run Code Online (Sandbox Code Playgroud)


erg*_*cak 7

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

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


@IBAction func onBack(_ sender: AnyObject) {
    _ = navigationController?.popViewController(animated: true)
}
Run Code Online (Sandbox Code Playgroud)


Tan*_*yem 6

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

   }
 }
Run Code Online (Sandbox Code Playgroud)

并从viewDidLoad()调用它

 self.navigationItem.addSettingButtonOnRight()
Run Code Online (Sandbox Code Playgroud)


pan*_*gam 6

对于Swift 4 add in viewDidLoad

navigationItem.rightBarButtonItem = UIBarButtonItem(
    barButtonSystemItem: UIBarButtonSystemItem.add, 
    target: self, 
    action: #selector(addTransaction)
)
Run Code Online (Sandbox Code Playgroud)


Ria*_*man 5

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
Run Code Online (Sandbox Code Playgroud)

然后像这样处理按钮动作

func buttonAction(_ sender: UIBarButtonItem) {

}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。