调用文本字段:应该从委托方法ReplaceCharactersInRange
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调用文本字段:应该从委托方法ReplaceCharactersInRange相关的知识,希望对你有一定的参考价值。
我已经构建了一个自定义的屏幕键盘,每个按键都会返回一个String?
。在我的委托方法中,我想将该文本转发到UITextFieldDelegate
方法:func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
func valueWasSent(string: String?) {
// activeTextField is a UITextField?
guard let textField = activeTextField else { return }
let range = NSMakeRange(0, string!.count - 1)
textField(activeTextField!, shouldChangeCharactersIn: range, replacementString: string!)
}
这里的最后一行不起作用,抛出错误:
无法调用非函数类型'UITextField'的值
知道我怎么能做到这一点?谢谢
很可能你不应该自己调用该委托方法。 shouldChangeCharactersIn
只是检查编辑是否有效。通常,UITextField
称之为确保提议的更改有效或无效。如果不是,则忽略该更改。如果是,则更新文本字段的文本。
如果你确实想要调用它,那么你需要在委托上调用它,而不是self
。您需要检查返回值。如果它返回true
,那么你应该相应地更新文本字段的文本。
if textField.delegate?.textField(textField, shouldChangeCharactersIn: range, replacementString: string!) {
// update the text field's text
}
另请注意,传递给它的范围应反映文本字段中的当前选择。您将其设置为与string
的长度相匹配。那很糟。如果您希望string
完全替换当前值,请至少传入与文本字段的当前值匹配的范围,而不是string
。
以上是关于调用文本字段:应该从委托方法ReplaceCharactersInRange的主要内容,如果未能解决你的问题,请参考以下文章
UIAlertController 的文本字段委托没有被调用
UITextField 委托“shouldChangeCharactersIn”不为文本字段中的第一个条目调用
在单元格文本字段的 textFieldShouldEndEditing 方法中调用 UICollectionView 重新加载数据不起作用