これは私が以前使用したものです、
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))
BarButtonにアクションを追加するためにSwift 3で最もよく使用されるメソッドを要約します。
テキスト付きのバーボタン
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action: #selector(addTapped))
独自の画像を持つBarButton
navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(named:"add"), style: .plain, target: self, action: #selector(addTapped))
システム画像付きのBarButton
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addTapped))
誰かがcustomView
を使用している場合:
barButtonItem.customView?.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(onBarButtonItemClicked)))
Swiftからselector
構文を変更する必要があります。3関数呼び出しでメソッドの最初のパラメーター名を指定する必要があるため、このようにセレクターを変更します。
#selector(menuButtonTapped(sender:))
そして、あなたの方法はこのようなものでなければなりません。
func menuButtonTapped(sender: UIBarButtonItem) {
}
IOS 10.1のSwift 3の1行のコード:
navigationController?.navigationBar.topItem?.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action: nil)
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 4にviewDidLoad
を追加:
navigationItem.rightBarButtonItem = UIBarButtonItem(
barButtonSystemItem: UIBarButtonSystemItem.add,
target: self,
action: #selector(addTransaction)
)
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()
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) {
}
それが役に立てば幸い。
既存のボタンにアクションを設定する方法を探している場合(Swift 5):
if let leftBarButtonItem = navigationItem.leftBarButtonItem {
leftBarButtonItem.target = self
leftBarButtonItem.action = #selector(onBack(_:))
}
@IBAction func onBack(_ sender: AnyObject) {
_ = navigationController?.popViewController(animated: true)
}
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")
}