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 字符串转换为 Double
如何调整 UITextField 占位符文本以适合 UITextField 宽度?