Как использовать DidEndEditing на текстовое поле на OS X (Swift)
Здесь я хочу реализовать то, что после нажатия клавиши возврата, если текст текстового поля совпадает со словом январь, печатать правильно, если нет, печатать неправильно.
Но когда я нажал клавишу возврата, ничего не печатается.
Может кто-нибудь написать пример кода о том, как использовать DidEndEditing для меня?
@IBOutlet weak var wordTextfield: NSTextField!
let monthEN = "January"
func textFieldDidEndEditing(wordTextfield: NSTextField) {
if wordTextfield.stringValue == monthE{
print("right")
}else{
print("wrong")
}
}
3 ответа
textFieldDelegate в OS X работает так в Swift 4:
class MainViewController: NSViewController, NSTextFieldDelegate {
@IBOutlet weak var textFileViewLabel: NSTextField!
override func viewDidLoad() {
super.viewDidLoad()
self.textField.delegate = self
}
override func controlTextDidChange(_ obj: Notification) {
//Here check the changes of textField input
}
override func controlTextDidEndEditing(_ obj: Notification) {
//Here check the changes of textField input
}
}
Предположительно, вы пришли из iOS и только сейчас переходите на OS X. У меня мало опыта разработки под OS X, но похоже, что textFieldDidEndEditing(_:)
не является частью NSTextFieldDelegate
протокол.
NSTextFieldDelegate
это просто продолжение NSControlTextEditingDelegate
и не добавляет никаких методов к нему.
И с учетом этого, похоже, что нам нужно реализовать control(_:textFieldShouldEndEditing:)
для аналогичного поведения на OS X или потенциально control(_:isValidObject:)
, Но так или иначе, важно отметить, что NSTextField
никогда не позвонит textFieldDidEndEditing(_:)
- это строго из iOS.
Для получения дополнительной информации, я рекомендую проверить документацию Apple дляNSControlTextEditingDelegate
,
Также стоит упомянуть, что вы действительно установили текстовое поле delegate
имущество.
Не забудьте указать делегату, где находятся данные (обычно на себя). т.е. wordTextfield = self (в ViewDidLoad)