我有子类文件,它使用来自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子类中的第一个方法将被覆盖。
如何在内部使用不同的操作两次使用相同的方法?
答案 0 :(得分:0)
如果你想让它执行,只需传递它。您需要实现所有委托协议方法,即使它们最终只是传递。例如:
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
// some other actions
self.field.textField(self.field, range, string)
return true
}
将对象作为自己的代表是危险的做法,并且可能导致参考周期。您应该考虑重构代码以完成不同的任务。