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

Dim*_*tri 5 email-address uitextfield ios inputaccessoryview swift

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

在运行 iOS 13.4 的 iPhone 8 上使用 Yelp

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

这是我的代码

    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)
}
Run Code Online (Sandbox Code Playgroud)

这是我在运行 Yelp 应用程序时在运行 iOS 13.4 的同一台 iPhone 8 上的样子:

在运行 iOS 13.4 的同一台 iPhone 8 上测试应用程序

没有电子邮件地址建议。

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

在运行 iOS 13.3 的 iPad Pro 上测试应用程序

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

感谢您的帮助!

Dim*_*tri 1

经过对具有正确行为的其他应用程序的一些研究后,我找到了上述问题的解决方案。

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

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

需要这样做:

  1. 为视图控制器指定一个包含“Register”之类的名称
  2. 在视图控制器中有一个带有 textContentType = .emailaddress 的 UITextField
  3. 在视图控制器中有一个 textContentType = .password 的 UITextField,该字段不是隐藏的,并且在创建注册视图控制器时是可编辑的。

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

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

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