gpt4 book ai didi

ios - 如何在子类化时获取 UITextField 的委托(delegate)事件,如果它的用户将自己设置为委托(delegate),又不会丢失委托(delegate)?

转载 作者:行者123 更新时间:2023-11-28 08:32:33 45 4
gpt4 key购买 nike

为简单起见,假设我想创建一个自定义 UITextField 并向其添加一个简单的行为;也就是说,如果文本字段成为第一响应者,背景颜色将变为绿色。

为此,在我的自定义类中,我必须将该类设置为委托(delegate)来接收成为第一响应者的事件。但问题是,如果此自定义文本字段的用户将自己设置为委托(delegate),则事件不会发送到自定义文本字段(因为只有一个对象可以是另一个对象的委托(delegate))

我可以手动转发所有事件,但我正在寻找更清洁、更具可扩展性的解决方案。

这里是一个大概的情况:

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 的委托(delegate)关系已经消失。

注意:我不仅对成为第一响应者问题感兴趣,而且它是关于使用委托(delegate)的任何方法,我的自定义 UITextField 的用户将自己设置为委托(delegate)的能力,在同一时间。

提前致谢。

最佳答案

正如您所说,大多数委托(delegate)仅限于作为委托(delegate)的单个对象。

由于文本字段是响应者,您应该能够覆盖 func becomeFirstResponder() -> Bool 来更改颜色,同时让对象的用户按预期处理委托(delegate)。

UIResponder 文档:“子类可以覆盖此方法以更新状态或执行某些操作,例如突出显示选择。”

关于ios - 如何在子类化时获取 UITextField 的委托(delegate)事件,如果它的用户将自己设置为委托(delegate),又不会丢失委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38590298/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com