[英]Call protocol method twice, Swift
我有使用UITextFieldDelegate协议中的方法的子类文件
class MyTextField: UITextField, UITextFieldDelegate {
. . .
override func willMoveToSuperview(newSuperview: UIView?) {
super.willMoveToSuperview(newSuperview)
self.delegate = self
}
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
// some actions
return true
}
}
在我的ViewController类中,我在子类中使用输入字段
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var field: MyTextFieldMask!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.field.delegate = self
}
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
// some other actions
return true
}
}
如果有人将UITextFieldDelegate协议方法添加到ViewController类(如上面的代码),则MyTextField子类中的第一个方法将被覆盖。
如何使用相同的方法两次执行不同的操作?
如果要执行它,只需将其传递。 您将需要实现所有委托协议方法,即使它们最终只是传递。 例:
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
// some other actions
self.field.textField(self.field, range, string)
return true
}
首先,使对象成为自身的代表是危险的做法,并且可能导致引用循环。 您应该考虑重构代码,以其他方式完成任务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.