it-swarm.com.de

So legen Sie die Aktion für ein UIBarButtonItem in Swift fest

Wie kann die Aktion für ein benutzerdefiniertes UIBarButtonItem in Swift festgelegt werden?

Der folgende Code platziert die Schaltfläche erfolgreich in der Navigationsleiste:

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

Nun möchte ich func sayHello() { println("Hello") } aufrufen, wenn die Schaltfläche berührt wird. Meine bisherigen Bemühungen:

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

und..

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

und..

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

Beachten Sie, dass sayHello() im Intellisense angezeigt wird, aber nicht funktioniert.

Danke für Ihre Hilfe.

BEARBEITEN: Für die Nachwelt arbeitet das Folgende:

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

Ab Swift 2.2 gibt es eine spezielle Syntax für vom Compiler überprüfte Selektoren. Es verwendet die Syntax: #selector(methodName).

Swift 3 und höher:

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

func sayHello(sender: UIBarButtonItem) {
}

Wenn Sie sich nicht sicher sind, wie der Methodenname aussehen soll, gibt es eine spezielle Version des Kopierbefehls, die sehr hilfreich ist. Setzen Sie den Cursor irgendwo in den Namen der Basismethode (z. B. Hallo) und drücken Sie Shift+Control+Option+C. Dadurch wird der Symbolname auf Ihrer Tastatur eingefügt. Wenn Sie auch halten Command Es wird der Name des qualifizierten Symbols kopiert, der auch den Typ enthält.

Swift 2.3:

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

func sayHello(sender: UIBarButtonItem) {
}

Dies liegt daran, dass der erste Parametername in Swift 2.3 beim Ausführen eines Methodenaufrufs nicht erforderlich ist.

Weitere Informationen zur Syntax von Swift.org finden Sie hier: https://Swift.org/blog/Swift-2-2-new-features/#compile-time-checked-selectors

139
drewag

Swift 4 Beispiel

button.action = #selector(buttonClicked(sender:))

@objc func buttonClicked(sender: UIBarButtonItem) {

}
11
norbDEV

In Swift 4 müssen wir vor der Aktionsmethode @objc hinzufügen.

Siehe folgendes Beispiel:

self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Select", target: self, action: #selector(selectAction(_:)))

 @objc func selectAction(_ sender:UIBarButtonItem) -> Void {
    print("Select Clicked")
}
0
Shahul Hasan