为了简单起见,假设我想创建一个自定义UITextField
,我想向它添加一个简单的行为;也就是说,如果文本字段成为第一个响应者,则背景颜色将更改为绿色。如何获取UITextField的委托事件同时继承它,而不会丢失委托,如果它的用户将自己设置为委托?
为此,在我的自定义类中,我必须将该类设置为委托来接收成为第一响应者的事件。但事情是,如果此自定义文本字段的用户将自己设置为委托事件不发送到自定义文本字段(因为只有一个对象可以是另一个对象的代表)
我可以手动转发所有事件,但我正在寻找更清洁,更具扩展性的解决方案。
这里的情况草图:
class MyTextField: UITextField {
override func awakeFromNib() {
super.awakeFromNib()
delegate = self
}
}
extension MyTextField: UITextFieldDelegate {
func textFieldDidBeginEditing(textField: UITextField) {
backgroundColor = UIColor.greenColor()
}
}
但如果MyTextField
用户做到这一点:
class ViewController: UIViewController {
@IBOutlet weak var myTextField: MyTextField!
override func viewDidLoad() {
super.viewDidLoad()
myTextField.delegate = self
}
}
的行为将无法正常工作;因为与MyTextField的代理关系消失了。
注意:我不只是想成为第一个响应的问题,而这是关于使用委托的任何方法,用我定制的UITextField的用户设置自己作为代表的能力,在同一时间。
谢谢,提前。
@philip感谢您的回复。事情是,我只是为了简单而使用这个例子;我的问题不仅仅是成为第一响应者,我更感兴趣的是知道如何在我的自定义UIKit类的用户将自己设置为委托后将子类化为UIKit类并在自定义类中使用委托而不会丢失委派连接。 – Erfan
@philip顺便说一下,是否有任何代表团不仅限于一个对象? – Erfan
在SDK中,我不确定。我们在内部完成了我们想要支持多个回调但具有比KVO或通知提供的更多结构(即协议)的情况。 –