Ios 调用textField:shouldReplaceCharactersRange来自委托方法
我已经建立了一个定制的屏幕键盘,每个按键都返回一个Ios 调用textField:shouldReplaceCharactersRange来自委托方法,ios,swift,uitextfield,uikit,Ios,Swift,Uitextfield,Uikit,我已经建立了一个定制的屏幕键盘,每个按键都返回一个字符串?。在我的委托方法中,我想将该文本转发到UITextFieldDelegate方法:func textField(\utextfield:UITextField,shouldchangeCharactersinrange:NSRange,replacementString:string)->Bool func valueWasSent(string: String?) { // activeTextField is a UIText
字符串?
。在我的委托方法中,我想将该文本转发到UITextFieldDelegate
方法:func textField(\utextfield:UITextField,shouldchangeCharactersinrange:NSRange,replacementString: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
的范围,您可以进一步解释一下:“如果您确实想调用它,那么您需要在代理上调用它,而不是在self上。”理想情况下,自定义键盘委托方法允许shouldChangeCharactersInRange
做出编辑决定。但我不知道该怎么做谢谢!现在有没有一种方法可以在我不显式设置textField.text的情况下更新textField的文本?例如,如果您使用的是硬件键盘,则值在shouldChangeCharactersIn
返回trueLook后更新,查看uiteInput
和UIKeyInput
协议(其中UITextField
符合)的方法。