调用文本字段:应该从委托方法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的主要内容,如果未能解决你的问题,请参考以下文章

将 Int 属性从文本字段传回控制器

UIAlertController 的文本字段委托没有被调用

UITextField 委托“shouldChangeCharactersIn”不为文本字段中的第一个条目调用

未调用 TextField 委托方法

在单元格文本字段的 textFieldShouldEndEditing 方法中调用 UICollectionView 重新加载数据不起作用

UITextField 委托返回多个文本字段