【发布时间】:2018-03-23 11:13:55
【问题描述】:
Swift 4.0 iOS 11.x
我创建了一个使用 UITextFieldDelegate 的简单文本字段类。我想向它添加一个附加协议,我可以使用它来传递到所述字段的文本输入已完成的事实。一个委托链,因为一旦我发现自定义类中的文本条目已退出这一事实,我似乎无法将其传递给 UITextField 类所在的 VC。
import UIKit
protocol ExitedFieldDelegate {
func exited(info: String)
}
class IDText: UITextField, UITextFieldDelegate {
internal var zeus: ExitedFieldDelegate? = nil
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
delegate = self
}
required override init(frame: CGRect) {
super.init(frame: frame)
delegate = self
}
func textFieldDidBeginEditing(_ textField: UITextField) {
self.textColor = UIColor.black
}
func textFieldDidEndEditing(_ textField: UITextField, reason: UITextFieldDidEndEditingReason) {
if (delegate != nil) {
let info = self.text
zeus?.exited(info: info!)
}
}
}
我将此代码添加到我想在其中使用我的自定义类的 viewController。
class ConfigViewController: UIViewController, ExitedFieldDelegate
当然还有协议要求的方法
func exited(info: String) {
print("The brain has left the room")
}
我让它成为上述协议的代表,所以我得到了它的效果
var blah = IDText()
blah.delegate = self
但是它不起作用。我是否在这里尝试不可能的事情,我应该简单地使用默认通知吗?还是别的什么?
【问题讨论】:
-
请试试这个 blah.zeus = self 并从 zeus 变量中删除 internal。
标签: ios swift delegates swift-protocols