【问题标题】:iOS: when user select QuickType keyboard handle selected UITextFieldiOS:当用户选择 QuickType 键盘句柄时选择 UITextField
【发布时间】:2021-08-25 13:53:46
【问题描述】:

在我的项目中,当用户选择特定的 UITextField(UITextField 应该获取用户电话号码)时,QuickType 键盘会显示用户电话号码。我希望当用户选择他/她的电话号码时,我可以更改它(删除电话号码中的“+”)并在该 UITextField 中显示结果。我该怎么做?

更新:

我尝试shouldChangeCharactersIn(UITextFieldDelegate 函数)来处理这个问题,但是replacementString 返回空格(“”)并且如果我只是返回 true(在该函数中什么都不做),那么 UITextField 内将不会显示任何内容。

【问题讨论】:

  • 您好,有没有解决您的问题?如果是,请接受。

标签: ios swift quicktype


【解决方案1】:

shouldChangeCharactersIn 是正确的,但如果使用 QuickType 键盘,它会被调用两次而不是一次。

第一次调用是为了清除当前字符串,即使它是空的:在这种情况下范围是(0, 0)。没有太多意义,但如果你输入一些东西,选择整个文本,并从快速帮助中粘贴电话号码,第一次更改将具有完整字符串的范围以清除它。

而要修改输入字符串,你需要更新文本字段text并返回false,因为你不再需要系统更新文本了。

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    if string.starts(with: "+") {
        let modifierString = String(string.dropFirst())
            .trimmingCharacters(in: .whitespacesAndNewlines)
        textField.text = ((textField.text ?? "") as NSString)
            .replacingCharacters(in: range, with: modifierString)
        return false
    } else {
        return true
    }
}

请注意,它也会忽略用户按下“+”,如果您不希望这样做,您可能需要添加更多逻辑,例如

if string.count > 1 && string.starts(with: "+") {

这将允许用户按“+”但将其从任何粘贴的内容中删除。

【讨论】:

    【解决方案2】:

    如果您的目标是删除任何多余的字符并只保留数字,您可以首先通过在情节提要文本字段的属性检查器中选择“数字键盘”键盘类型来限制用户仅输入数字.

    或者如果你想用代码来做:

    textField.keyboardType = .numberPad
    

    很抱歉,如果这不是您要找的东西,我只是想也许您将问题复杂化并诉诸将文本过滤为数字,而 Apple 提供了一种专门用于收集您可以使用的电话号码的键盘而是。

    【讨论】:

      猜你喜欢
      • 2014-05-17
      • 2013-02-11
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-13
      相关资源
      最近更新 更多