我有一个ViewController,它继承自UITextFieldDelegate,并作为视图中文本字段的代理。我希望在编辑文本时触发操作。
我尝试实现了textField
方法,该方法在UITextFieldDelegate documentation中列出:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
字符串
该文档将此textField
方法描述为当文本 * 应该 * 更改时触发,这发生在 * 指定文本更改 * 之前 *。下面是文档中的一行:
询问代理是否应更改指定的文本。
由于此textField
方法在文本更改 * 之前 * 而不是 * 之后 * 触发,因此textField.text
处可用的文本包含 * 先前 * 的文本,而不是更改后更新的 * 新 * 文本。为了访问新文本,我需要将range
和replacementString
参数应用于textField.text
,以模拟文本将如何更改。
是否有一个替代textField
方法的方法,该方法不是在文本 * 将要 * 更改时触发,而是在文本 * 已经 * 更改时触发?我在想,直接使用修改后的文本可以避免我事先对修改的模仿。
4条答案
按热度按时间mtb9vblg1#
为
valueChanged
添加一个带有选择器的目标,您将能够获得所需的事件。字符串
biswetbf2#
你试过textDidChangeNotification吗?你将不得不为keyboarddidshow(notification)添加观察者。对于您的参考:https://stackoverflow.com/a/52325593
zpgglvta3#
只需将扩展UITextfieldDelegate写入viewController,您将拥有这些预定义的函数:
字符串
x6h2sr284#
只是一个调整到弗兰肯斯坦的版本,它的工作正常:
字符串