调用协议方法两次,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类中,我使用input字段与我的子类

 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 } 

将对象作为自己的代表是危险的做法,可能导致参考周期。 你应该考虑重构你的代码,以不同的方式完成你的任务。