自定义 UITextField 委托方法 shouldChangeCharactersIn 没有被调用

Posted

技术标签:

【中文标题】自定义 UITextField 委托方法 shouldChangeCharactersIn 没有被调用【英文标题】:Custom UITextField Delegate method shouldChangeCharactersIn is not getting called 【发布时间】:2018-07-11 11:37:09 【问题描述】:

在我的自定义 UITextFieldtextFieldDidBeginEditing()textFieldDidEndEditing() 委托方法被调用但 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool

@IBDesignable class CustomUITextField: UITextField, UITextFieldDelegate

   //getting Called
   @objc func textFieldDidBeginEditing() 

    

   //getting Called
    @objc func textFieldDidEndEditing()

    

    //Not getting Called
    @objc func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool 

    


我不知道为什么没有被调用。是否需要为此做任何额外的工作?

提前致谢。

【问题讨论】:

如果可能,请显示原始代码。 @Rakesha Shastri 抱歉我不能在这里显示原始代码 人们从当前的代码中可以得出的唯一结论是您没有正确设置委托。但这似乎也不是原因,因为你说前两个代表被召唤了。 在 awakeFromNib() 方法中尝试委托 @Devil 解码器很棒!在 awakeFromNib() 中添加委托后它正在工作。非常感谢。 【参考方案1】:

你需要设置委托

@IBDesignable class CustomUITextField: UITextField, UITextFieldDelegate

    override init(frame: CGRect) 
        super.init(frame: frame)

        self.delegate = self
    

    required init?(coder aDecoder: NSCoder) 

        super.init(coder: aDecoder)

          self.delegate = self
    

    //getting Called
    @objc func textFieldDidBeginEditing() 

        print("textFieldDidBeginEditing")
    

    //getting Called
    @objc func textFieldDidEndEditing()

        print("textFieldDidEndEditing")
    

    //Not getting Called
    @objc func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool 

        print("shouldChangeCharactersIn")

        return true

    


【讨论】:

我已经在 override init(frame: CGRect) 和 required init 中设置了委托?(coder aDecoder: NSCoder) 但仍然无法正常工作 不,只有弱 @IBOutlet weak var pinCodeTextField: CustomUITextField! 检查是否覆盖了包含它的 VC 中的委托 @Sh_Khan 我使用override var delegate: UITextFieldDelegate? get return userDelegate set userDelegate = newValue 调用shouldChangeCharactersIn 委托方法。但是我应该在这个委托中检查的正则表达式由于委托的获取和设置而被阻止。解决办法是什么?

以上是关于自定义 UITextField 委托方法 shouldChangeCharactersIn 没有被调用的主要内容,如果未能解决你的问题,请参考以下文章

需要在 Swift 中的 UITextField 委托方法中引用自定义 UITableViewCell 而不使用 tag 属性

如何在 XIB 中调用 UITextField 的委托方法?

两个类相互引用/从它的委托方法中的 UITextField 访问 UITableViewCell?

UITextfield 类快速调用委托方法

关于 iphone 上的自定义 UItextField 包括代表

在不使用委托方法的情况下检测 UITextView 和/或 UITextField 上的 SELECTION 更改