【发布时间】:2016-07-26 12:46:24
【问题描述】:
为简单起见,假设我想创建一个自定义 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 的用户可以将自己设置为委托,在同时。
谢谢,提前。
【问题讨论】:
标签: ios swift delegates uitextfield subclassing