从委托方法调用 textField:shouldReplaceCharactersInRange
Calling textField:shouldReplaceCharactersInRange from a delegate method
我构建了一个自定义屏幕键盘,其中每个键点击 returns 一次 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!)
}
此处最后一行无效,并抛出错误:
Cannot call value of non-function type 'UITextField'
知道如何实现吗?谢谢
您很可能不应该自己调用该委托方法。 shouldChangeCharactersIn
只是检查编辑是否有效。通常,UITextField
调用它以确保提议的更改有效或无效。如果不是,则忽略更改。如果是,则更新文本字段的文本。
如果你真的想调用它,那么你需要在委托上调用它,而不是 self
。您需要检查 return 值。如果它 returns true
那么你应该相应地更新文本字段的文本。
if textField.delegate?.textField(textField, shouldChangeCharactersIn: range, replacementString: string!) {
// update the text field's text
}
另请注意,您传递给它的范围应反映文本字段中的当前选择。您正在将其设置为匹配 string
的长度。那很糟。如果您希望 string
完全替换当前值,至少传入一个与文本字段的当前值匹配的范围,而不是 string
.
我构建了一个自定义屏幕键盘,其中每个键点击 returns 一次 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!)
}
此处最后一行无效,并抛出错误:
Cannot call value of non-function type 'UITextField'
知道如何实现吗?谢谢
您很可能不应该自己调用该委托方法。 shouldChangeCharactersIn
只是检查编辑是否有效。通常,UITextField
调用它以确保提议的更改有效或无效。如果不是,则忽略更改。如果是,则更新文本字段的文本。
如果你真的想调用它,那么你需要在委托上调用它,而不是 self
。您需要检查 return 值。如果它 returns true
那么你应该相应地更新文本字段的文本。
if textField.delegate?.textField(textField, shouldChangeCharactersIn: range, replacementString: string!) {
// update the text field's text
}
另请注意,您传递给它的范围应反映文本字段中的当前选择。您正在将其设置为匹配 string
的长度。那很糟。如果您希望 string
完全替换当前值,至少传入一个与文本字段的当前值匹配的范围,而不是 string
.