【问题标题】:How can I get UITextField's textContentType property to do anything?如何让 UITextField 的 textContentType 属性做任何事情?
【发布时间】:2016-09-22 07:42:48
【问题描述】:

Here's the documentation on UITextField's textContentType property:

使用此属性为键盘和系统提供有关用户输入内容的预期语义含义的信息。例如,您可以为用户填写以接收电子邮件确认的文本字段指定 UITextContentTypeEmailAddress。当您提供有关您希望用户在文本输入区域输入的内容的信息时,系统在某些情况下可以自动选择合适的键盘并改进键盘更正以及与其他文本输入机会的主动集成。

由于每个文本输入区域的预期语义应尽可能具体地标识,因此您不能为一个 textContentType 属性组合多个值。有关您可以使用的可能值,请参阅Text Content Types;默认情况下,该属性的值为nil

这看起来很简单,但我不知道如何让它真正做任何事情。我创建了一个简单的演示应用程序,添加了一个文本字段,并设置了self.textField.textContentType = UITextContentTypeEmailAddress。然后我在装有 iOS 10.0.1 的 iPhone 7 上运行它。

至少我希望这会自动选择电子邮件键盘,而无需明确设置它。它没有——我在我的 iPhone 上安装了标准键盘。

我还希望它显示我自己的电子邮件地址以获取 QuickType 建议。我在其他地方看到过这种情况——如果我在 Safari 中并且它检测到我正在编辑一个电子邮件字段,它会显示我的家庭和工作电子邮件地址作为建议。同样,它在这里没有这样做,即使文档建议它应该这样做。

即使我也将keyboardType 设置为UIKeyboardTypeEmailAddress,我仍然没有得到我期望的 QuickType 建议。

There's a WWDC talk that discusses this new capability,但除了设置这个单一属性之外,没有任何建议您需要做任何事情。

我是否遗漏了一些步骤,或者这实际上没有达到我的预期?

【问题讨论】:

  • FWIW,我也没有看到它工作。我将其设置为输入“地点”或位置或任何该选项用于我们输入地名和 AFAICT 的字段,它没有影响。
  • 在这里不工作,想不出任何其他选项或应用程序元数据可以使它工作:(在 Safari 中工作。第 3 方应用程序:在 Uber 的 WWDC 上进行了演示 - 我想知道,它在 Uber 中仍然有效吗?
  • 在 iOS 10.2 中仍然存在问题

标签: ios objective-c uitextfield uikit


【解决方案1】:

iOS 11 中的第三方应用程序最终支持此功能。我有一个使用 iOS 11 beta 1 上安装的 iOS 10.3 SDK 构建的应用程序。它包含带有 textContentType = UITextContentTypeEmailAddress 的字段,这些正确地建议了我联系人中的两个电子邮件地址卡片。我也有带有textContentType = UITextContentTypePostalCode 的字段可以正确提示我的邮政编码。

iOS 11除了现有的类型外,还增加了UITextContentTypeUsernameUITextContentTypePassword,可以用来支持Password AutoFill for Apps

【讨论】:

    【解决方案2】:

    仅供参考(因为我在谷歌和苹果文档中几乎找不到它):

    在新的 ios 中苹果提供了一个新功能(看图片)。 这是关于它们的descriptionwwdc

    【讨论】:

    • 关于smartInsertDeleteType 属性的特殊技巧。默认值总是在插入的值之间带一个空格(额外的空格)。
    • 我被这个多余的空间烫伤了。请参阅 DonMag 提供的解决方案以解决此问题:stackoverflow.com/questions/60566137/…
    【解决方案3】:

    我一直在努力尝试通过在 UITextField 上指定 .textContentType 来让“自动完成”工作。它似乎命中或错过,我放弃了很多次。我今天重新审视了这个问题并学习了一些技巧来让它工作(更好)。

    • 将.spellCheckingType.autocorrectionType 设置为.no。当这些属性是其他任何东西时,自动完成功能不起作用。更糟糕的是,这些属性的默认值为.default,因此根本不设置它们会导致无法自动完成。

    keyboardType = .numberPad 似乎根本不支持自动完成。当我切换到.numbersAndPunctuation 时,电话号码的自动完成功能开始工作。

    所有这些都完成了,有时文本字段仍然无法每次都使用自动完成功能。如果我进入一个不同的领域,然后回到有问题的领域,自动完成就可以了。对此没有任何解释,还有一些我没有发现的神秘肉。但是上面的提示让我更接近了……”

    【讨论】:

      猜你喜欢
      • 2012-02-24
      • 2012-11-29
      • 1970-01-01
      • 2014-02-09
      • 2013-11-10
      • 1970-01-01
      • 1970-01-01
      • 2011-04-26
      • 2020-10-14
      相关资源
      最近更新 更多