从委托方法调用textField:shouldReplaceCharactersInRange

时间:2018-01-04 17:25:16

标签: ios swift uitextfield uikit

我已经构建了一个自定义屏幕键盘,每个按键都会返回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'的值

知道我怎么能做到这一点?感谢

1 个答案:

答案 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 );