iOS / Swift:在 UITextFields 的键盘上显示电子邮件地址建议

Posted

技术标签:

【中文标题】iOS / Swift:在 UITextFields 的键盘上显示电子邮件地址建议【英文标题】:iOS / Swift: Showing email addresses suggestions on keyboard for UITextFields 【发布时间】:2020-07-15 06:54:39 【问题描述】:

在我们的一个 ios / iPhone 应用程序中,我们需要在注册过程中显示用户配置的电子邮件地址作为建议。有几个应用程序将电子邮件地址显示为键盘输入附件视图中的固定按钮。例如 Yelp 应用程序(带有 iOS 13.4 的 iPhone 8)

我无法弄清楚如何使用内置方式启用此功能。我尝试将 textContentType、keyboardType 和 autocorrectionType 设置为正确的值,如我可以找到的有关此主题的其他堆栈溢出文章中所述。

这是我的代码

    override func viewDidLoad() 
    super.viewDidLoad()

    let email = UITextField(frame: CGRect(x: 10, y: 60, width: 300, height: 40))
    email.placeholder = "Enter email address here"
    email.font = UIFont.systemFont(ofSize: 15)
    email.borderStyle = UITextField.BorderStyle.roundedRect
    email.clearButtonMode = UITextField.ViewMode.whileEditing
    email.contentVerticalAlignment = UIControl.ContentVerticalAlignment.center
    email.returnKeyType = .continue

    email.keyboardType = .emailAddress
    email.textContentType = .emailAddress
    email.autocorrectionType = .yes
    email.autocapitalizationType = .none

    view.addSubview(email)

这就是我在运行 Yelp 应用程序时在装有 iOS 13.4 的 iPhone 8 上的样子:

没有电子邮件地址建议。

奇怪的是,在我的 iPad 上运行的同一个应用程序会以不同的方式显示建议:

如何以与 Yelp 相同的方式显示用户的电子邮件地址?是否有我必须使用的特殊 UITextField 视图,或者是否有其他方法可以获取电子邮件地址并将其显示在自定义文本附件视图中?

感谢您的帮助!

【问题讨论】:

阅读此答案的最后两个 cmets:***.com/a/47282004/2660952 以及这些苹果论坛主题:forums.developer.apple.com/thread/123561 和 forums.developer.apple.com/thread/120703 那里可能有一些变化/问题iOS 13,尽管其他人似乎想让它在这个版本上运行...... 我刚刚检查了你的代码,它的工作就像一个魅力!它会在键盘顶部显示我的电子邮件地址。 【参考方案1】:

我解决了这个问题,为 UITextField 提供了 accessibilityLabel = "Registration" 而不是重命名视图控制器。

【讨论】:

【参考方案2】:

我花了几个小时对此感到沮丧,但我找到了一个简单的解决方法。您可以通过更改 ViewController 的名称来显示电子邮件建议,以便在其中包含诸如 Register 之类的内容,或者在我的情况下,我只是去了 Identity Inspector 中的标签字段并添加了文本“Register”,因为我不想重命名视图控制器。然后我添加了启用安全文本输入的第二个文本字段。这就是你需要做的。所有其他选项都可以设置为默认值。您可以在几分钟内完成此操作。

Apple 希望您在使用电子邮件建议时使用注册表单,以便他们在 ViewController 中检查该名称,并希望您拥有密码,以便他们也进行检查。所有其他视图默认为无建议或密码应用程序。

【讨论】:

【参考方案3】:

在对其他具有正确行为的应用进行一些研究后,我找到了解决上述问题的方法。

Apple 在后台做了一点魔法,称为“启发式”,但 Apple 没有描述它。

我们的问题是,只有一个 UITextField 要求提供电子邮件地址,并且没有上下文。

这需要完成:

    给视图控制器起一个包含“注册”之类的名称 在视图控制器中有一个 textContentType = .emailaddress 的 UITextField 在视图控制器中有一个 textContentType = .password 的 UITextField,它不是隐藏的,并且在创建注册视图控制器时是可编辑的。

我们的解决方案是隐藏电子邮件文本字段下方的密码文本字段。密码文本字段必须至少比电子邮件文本字段低一点,以使其可编辑。我们只是在电子邮件和密码之间放置一个视图来隐藏它。

编辑或选择电子邮件地址后,我们将密码文本字段移动到电子邮件文本字段下方。

这个开始让我的大脑融化,但至少我们找到了一个对我们有用的解决方案。

【讨论】:

以上是关于iOS / Swift:在 UITextFields 的键盘上显示电子邮件地址建议的主要内容,如果未能解决你的问题,请参考以下文章

在 uiview 中有超过 1 个 uitextfield 的 iOS swift 委托

如何在 Swift iOS 中禁用 UITextField 双击或长按? [复制]

Ios Swift Override 双击 UItextField

仅允许 UITextField 输入 Swift iOS8 的电子邮件 [重复]

如何在iOS swift 4中进行名字验证?

以编程方式在 UIView 上添加 UITextField Swift