web-dev-qa-db-ja.com

Swift 3でuibarButtonItemのアクションをプログラムで設定する方法

これは私が以前使用したものです、

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

ただし、Swift 3にはいくつかの構文変更があります。事前に感謝します。

43
Bhanupriya

例:-

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

BarButtonにアクションを追加するためにSwift 3で最もよく使用されるメソッドを要約します。

  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))
    
52
flame3

誰かがcustomViewを使用している場合:

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

Swiftからselector構文を変更する必要があります。3関数呼び出しでメソッドの最初のパラメーター名を指定する必要があるため、このようにセレクターを変更します。

#selector(menuButtonTapped(sender:))

そして、あなたの方法はこのようなものでなければなりません。

func menuButtonTapped(sender: UIBarButtonItem) {

}
14
Nirav D

IOS 10.1のSwift 3の1行のコード:

navigationController?.navigationBar.topItem?.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action: nil)
12
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 }
8
Mihail Salari

Swift 4にviewDidLoadを追加:

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

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

   }
 }

そして、viewDidLoad()から呼び出します

 self.navigationItem.addSettingButtonOnRight()
6
Mr. Tann

Swiftでは、そのような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) {

}

それが役に立てば幸い。

5
Riajur Rahman

既存のボタンにアクションを設定する方法を探している場合(Swift 5):

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


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

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")    
}
1
A.G