Как установить действие для UIBarButtonItem в Swift
как можно установить действие для пользовательского UIBarButtonItem в Swift?
следующий код успешно помещает кнопку в панель навигации:
var b = UIBarButtonItem(title: "Continue", style: .Plain, target: self, action:nil)
self.navigationItem.rightBarButtonItem = b
теперь я хотел бы позвонить func sayHello() { println("Hello") }
при нажатии. Мои усилия до сих пор:
var b = UIBarButtonItem(title: "Continue", style: .Plain, target: self, action:sayHello:)
// also with `sayHello` `sayHello()`, and `sayHello():`
и..
var b = UIBarButtonItem(title: "Continue", style: .Plain, target: self, action:@selector(sayHello:))
// also with `sayHello` `sayHello()`, and `sayHello():`
и..
var b = UIBarButtonItem(title: "Continue", style: .Plain, target: self, action:@selector(self.sayHello:))
// also with `self.sayHello` `self.sayHello()`, and `self.sayHello():`
отметим, что sayHello()
появляется в intellisense, но не работает.
Спасибо за вашу помощь.
изменить: Для потомков созданы следующие произведения:
var b = UIBarButtonItem(title: "Continue", style: .Plain, target: self, action:"sayHello")
2 ответа:
начиная с Swift 2.2, существует специальный синтаксис для селекторов, проверенных компилятором. Он использует синтаксис:
#selector(methodName)
.Swift 3 и позже:
var b = UIBarButtonItem( title: "Continue", style: .plain, target: self, action: #selector(sayHello(sender:)) ) func sayHello(sender: UIBarButtonItem) { }
Если вы не уверены, как должно выглядеть имя метода, существует специальная версия команды копирования, которая очень полезна. Поместите курсор где-нибудь в имя базового метода (например, sayHello) и нажмите Shift+управления+опции+C. Это ставит "имя символа" на клавиатуре для вставки. Если вы также держите команда он скопирует "квалифицированное имя символа", которое также будет включать тип.
Swift 2.3:
var b = UIBarButtonItem( title: "Continue", style: .Plain, target: self, action: #selector(sayHello(_:)) ) func sayHello(sender: UIBarButtonItem) { }
это связано с тем, что первое имя параметра не требуется в Swift 2.3 при вызове метода.
вы можете узнать больше о синтаксисе на swift.org здесь: https://swift.org/blog/swift-2-2-new-features/#compile-time-checked-selectors