我有完全相同的問題(在Swift 3)。我解決了覆蓋delegate
屬性的問題UITextField
類。
在我的自定義視圖初始化,我掛鉤我自己的內部委託:
class CustomTextField: UITextField, UITextFieldDelegate {
override public init(frame: CGRect) {
super.init(frame: frame)
initCustomTextField()
}
required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initCustomTextField()
}
private func initCustomTextField() {
super.delegate = self // Note the super qualifier.
}
...
現在我們需要覆蓋上述delegate
屬性:
private weak var userDelegate: UITextFieldDelegate?
override var delegate: UITextFieldDelegate? {
get { return userDelegate }
set { userDelegate = newValue }
}
最後,每個UITextFieldDelegate
協議方法您必須轉發調用外部代理,如果有的話:
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
// Do your thing here, and then forward:
return self.delegate?.textFieldShouldBeginEditing?(self) ?? true
}
func textFieldDidBeginEditing(_ textField: UITextField) {
// Do your thing here, and then forward:
self.delegate?.textFieldDidEndEditing?(self)
}
...
一個警告,如果你打算支持iOS的10還有:
func textFieldDidEndEditing(_ textField: UITextField) {
self.delegate?.textFieldDidEndEditing?(self)
}
/// This method will be called, instead of the above, on iOS ≥ 10.
@available(iOS 10.0, *)
func textFieldDidEndEditing(_ textField: UITextField, reason: UITextFieldDidEndEditingReason) {
self.delegate?.textFieldDidEndEditing?(self, reason: reason)
}
首先是什麼情景,你爲什麼什麼子類'UITextField'? – AMohan