繁体   English   中英

两次调用协议方法,Swift

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM