我有一個UITextField
子類。我需要知道文本何時發生變化,我可以通過NotificationCenter
和觀察.UITextFieldTextDidChange
得知,但現在我需要知道用戶何時點擊返回按鈕。我能想到的唯一解決方案是將UITextField
子類設置爲它自己的代理,但它聽起來並不乾淨。從UITextField子類捕獲委託方法而不是委託
- 有沒有乾淨的方式來獲得子返回鍵事件
- 是否確定設置
UITextField
子類是它自己的代表?
我有一個UITextField
子類。我需要知道文本何時發生變化,我可以通過NotificationCenter
和觀察.UITextFieldTextDidChange
得知,但現在我需要知道用戶何時點擊返回按鈕。我能想到的唯一解決方案是將UITextField
子類設置爲它自己的代理,但它聽起來並不乾淨。從UITextField子類捕獲委託方法而不是委託
UITextField
子類是它自己的代表?在子類中做
self.addTarget(self, action: #selector(returnKeyPressed), for: .editingDidEndOnExit);
看着蘋果DOC你看UIControlEvents
UIControlEventEditingDidEndOnExit = 1 < < 19,// '返回鍵' 結尾的編輯
有用的信息。這回答了這個問題。但我最終將textField封裝在一個'UIView'中,並將其作爲'UITextField'的代表,它可以是'private' – iOSGeek
您可以將您的viewController設置爲委託。在viewDidLoad
中,您可以添加這一行代碼。
myTextField.delegate = self
您還需要viewController的UITextFieldDelegate協議。
extension MyViewController: UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
//User tapped the return button
return true
}
}
我認爲將委託設置到子類沒有任何問題。如果您需要了解班級以外的水龍頭,那麼您將需要另一位代表,以便您可以使用我的第一個解決方案。你也應該知道,如果你改變委託,你的子類中的代碼將不會再被調用,並且可能導致意外的行爲。
我可以問你爲什麼需要嗎? – Andrea
我正在使用'UITextFieldDelegate',我將代理設置爲適當的textField,其中需要標識RETURN按鈕。然後,您可以使用'func textFieldShouldReturn(_textField:UITextField) - > Bool'來識別是否點擊返回按鈕。儘管如此,我並不十分確定這是否是最乾淨的解決方案。 – AlexWoe89
有一個有趣的討論你的問題的第二點在這裏:https://stackoverflow.com/questions/29054602/does-a-class-being-its-own-delegate-follow-ios-convention –