我已经构建了一个自定义屏幕键盘,每个按键都会返回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'的值
知道我怎么能做到这一点?感谢
答案 0 :(得分:1)
您很可能不应该自己调用该委托方法。 UITextField
只是检查编辑是否有效。通常,self
会调用它以确保建议的更改有效或无效。如果不是,则忽略该更改。如果是,则更新文本字段的文本。
如果您确实想要调用它,那么您需要在代理上调用它,而不是true
。您需要检查返回值。如果它返回if textField.delegate?.textField(textField, shouldChangeCharactersIn: range, replacementString: string!) {
// update the text field's text
}
,那么您应该相应地更新文本字段的文本。
string
另请注意,传递给它的范围应反映文本字段中的当前选择。您将其设置为与string
的长度相匹配。那很糟。如果您希望string
完全替换当前值,请至少传入与文本字段的当前值匹配的范围,而不是date = moment("2018-01-04", "YYYY-MM-DD");
$("#calendar").fullCalendar( 'gotoDate', date );
。