UITextField - shouldChangeCharactersIn 与 self.addSubview()

Posted

技术标签:

【中文标题】UITextField - shouldChangeCharactersIn 与 self.addSubview()【英文标题】:UITextField - shouldChangeCharactersIn with self.addSubview() 【发布时间】:2017-02-07 07:14:38 【问题描述】:

我的问题是,如果我自定义 UITextField,那么 shouldChangeCharactersIn() 方法不会被调用,但是如果我不应用这个自定义,一切都会很好。

我使用库 SkyFloatingLabelTextField

第一个文件:

override func viewDidLoad() 
    super.viewDidLoad()

    emailField.setRegistrationFieldStyleWith(title: "E-mail")
    emailField.delegate = self

带有扩展名的第二个文件:

func setRegistrationFieldStyleWith(title: String) 
    let textField = SkyFloatingLabelTextField(frame: CGRect(x: 0, y: 0, width: 215, height: 40))
    textField.placeholder = title
    textField.title = title

    textField.tintColor = overcastBlueColor 
    ...
    ...

    self.addSubview(textField)

也许谁面对过这个图书馆?或者输入处理方法开始表现不同,如果要自定义的字段?

【问题讨论】:

你想达到什么目的? 在 setRegistrationFieldStyleWith 方法中尝试 textField.delegate = self 我想添加对电子邮件有效性的简单检查。更改 UITextField 时调用 shouldChangeCharactersIn 方法。通常它可以工作,但是当我使用库时它停止工作,所以我想,表面上回答还是值得探索图书馆?! :) textField 被添加为 emailField 的子视图。但是您被设置为 emailField 的代表。我认为这就是问题所在。委托应设置为作为 emailField 的子视图添加的 textField 【参考方案1】:

试试这个

override func viewDidLoad() 

    super.viewDidLoad()

    emailField.setRegistrationFieldStyleWith(title: "E-mail")

    for view in emailField.subviews 

        if view.isKind(of: UITextField.self) 

            let textFieldView = view as! UITextField
            textFieldView.delegate = self
        
    

【讨论】:

我仍然不明白它是如何工作的,但它确实有效:D 谢谢! 欢迎兄弟 :-) 在这里,我只是找到了作为 emailField 子视图添加的自定义 textField 并将委托设置为它。当您输入 emailField 时,您实际上是在输入自定义的 textField,因为它是 emailField 的子视图。因此,为了使用自定义文本字段的委托方法,您应该将委托设置为该文本字段,而不是电子邮件字段。希望你理解

以上是关于UITextField - shouldChangeCharactersIn 与 self.addSubview()的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UITextField 子类中设置 UITextField 的属性

UITextField

在 UITextField 操作中将 UITextField 字符串转换为 Double

如何调整 UITextField 占位符文本以适合 UITextField 宽度?

如果添加了新的 UITextField,如何向下移动许多 UITextField

如果 UITextField 已经创建,不要在 Tap 上重新创建 UITextField