ios swift action uibarbuttonitem

ios - Cómo establecer la acción para un UIBarButtonItem en Swift



action (2)

A partir de Swift 2.2, existe una sintaxis especial para los selectores comprobados en tiempo de compilación. Utiliza la sintaxis: #selector(methodName) .

Swift 3 y más tarde:

var b = UIBarButtonItem( title: "Continue", style: .plain, target: self, action: #selector(sayHello(sender:)) ) func sayHello(sender: UIBarButtonItem) { }

Si no está seguro de cómo debería ser el nombre del método, hay una versión especial del comando de copia que es muy útil. Coloque el cursor en algún lugar del nombre del método base (por ejemplo, decirHola) y presione Mayús + Control + Opción + C. Eso pone el ''Nombre del Símbolo'' en su teclado para pegar. Si también tiene Command , copiará el ''Nombre del símbolo calificado'' que también incluirá el tipo.

Swift 2.3:

var b = UIBarButtonItem( title: "Continue", style: .Plain, target: self, action: #selector(sayHello(_:)) ) func sayHello(sender: UIBarButtonItem) { }

Esto se debe a que el primer nombre de parámetro no es necesario en Swift 2.3 cuando se realiza una llamada a un método.

Puede obtener más información sobre la sintaxis en swift.org aquí: https://swift.org/blog/swift-2-2-new-features/#compile-time-checked-selectors

¿Cómo se puede establecer la acción para un UIBarButtonItem personalizado en Swift?

El siguiente código coloca con éxito el botón en la barra de navegación:

var b = UIBarButtonItem(title: "Continue", style: .Plain, target: self, action:nil) self.navigationItem.rightBarButtonItem = b

Ahora, me gustaría llamar a func sayHello() { println("Hello") } cuando se toca el botón. Mis esfuerzos hasta el momento:

var b = UIBarButtonItem(title: "Continue", style: .Plain, target: self, action:sayHello:) // also with `sayHello` `sayHello()`, and `sayHello():`

y..

var b = UIBarButtonItem(title: "Continue", style: .Plain, target: self, action:@selector(sayHello:)) // also with `sayHello` `sayHello()`, and `sayHello():`

y..

var b = UIBarButtonItem(title: "Continue", style: .Plain, target: self, action:@selector(self.sayHello:)) // also with `self.sayHello` `self.sayHello()`, and `self.sayHello():`

Tenga en cuenta que sayHello() aparece en intellisense, pero no funciona.

Gracias por tu ayuda.

EDITAR: Para la posteridad, los siguientes trabajos:

var b = UIBarButtonItem(title: "Continue", style: .Plain, target: self, action:"sayHello")


Ejemplo de Swift 4

button.action = #selector(buttonClicked(sender:)) @objc func buttonClicked(sender: UIBarButtonItem) { }