right plus item bar ios swift selector swift3 uibarbuttonitem

ios - plus - swift 4 navigation bar right button



¿Cómo establecer la acción programáticamente para barButtonItem en swift 3? (10)

Aquí es lo que he usado anteriormente,

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

Pero hay algunos cambios de sintaxis para Swift 3. Gracias de antemano.


En Swift 3 , puedes agregar UIBarButtonItem así,

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

Y manejar la acción del botón de esa manera,

func buttonAction(_ sender: UIBarButtonItem) { }

Espero eso ayude.


Hacer un artículo UIBarButton:

let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.done, target: self, action: #selector(LocationViewController.doneButtonClicked(_:)))

Agregar al elemento de navegación:

self.navigationItem.rightBarButtonItem = rightButton

Función asociada:

func doneButtonClicked(_ button:UIBarButtonItem!){ print("Done clicked") }


Resuma el método más utilizado en Swift 3 para agregar acción a un botón de barra.

  1. Barbutton con texto

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

  2. BarButton con tu propia imagen.

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

  3. BarButton con imagen del sistema.

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


Si alguien está usando customView :

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


Solo necesita cambiar la sintaxis de su selector partir de Swift 3, debe especificar el primer nombre de parámetro del método en su llamada de función, así que cambie su selector de esta manera.

#selector(menuButtonTapped(sender:))

Y tu método debería ser así.

func menuButtonTapped(sender: UIBarButtonItem) { }


Una línea de código en Swift 3 para iOS 10.1:

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


crear una extensión para el artículo de botón.

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

Y llámalo desde viewDidLoad ()

self.navigationItem.addSettingButtonOnRight()


ex:-

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


para Swift 4 agregar en viewDidLoad :

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


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 }