iOS / Swift: отображение предложений адресов электронной почты на клавиатуре для UITextFields - PullRequest
3 голосов
/ 03 апреля 2020

В одном из наших приложений iOS / iPhone нам необходимо отображать настроенные адреса электронной почты пользователя в качестве подсказок при регистрации. Существует несколько приложений, которые отображают адреса электронной почты в виде фиксированных кнопок в представлении ввода с клавиатуры. Например, приложение Yelp (iPhone 8 с iOS 13.4)

Yelp on iPhone 8 running iOS 13.4

Я не мог понять, как включить эту функцию с помощью встроенного средства. Я попытался установить для textContentType, keyboardType и autocorrectionType правильные значения, как описано в других статьях по переполнению стека, которые я мог найти об этой топи c.

Это мой код

    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)
}

И Вот как это выглядит на том же iPhone 8 с iOS 13,4, на котором я запускал приложение Yelp:

Test App on the same iPhone 8 running iOS 13.4

Нет электронной почты адреса предложения.

Любопытно, что одно и то же приложение, работающее на моем iPad, показывает предложения, но по-другому:

Test App on iPad Pro running iOS 13.3

Как я могу отображать адреса электронной почты пользователя так же, как это делает Yelp? Нужно ли мне использовать специальное представление UITextField или есть другой способ получить адреса электронной почты и отобразить их в пользовательском текстовом дополнительном представлении?

Спасибо за вашу помощь!

1 Ответ

1 голос
/ 23 апреля 2020

После некоторого исследования других приложений, которые имеют правильное поведение, я нашел решение для указанной выше проблемы.

Apple делает немного магии c в фоновом режиме, который называется "Heuristi c" но Apple не описывает это.

Наша проблема заключалась в том, что был только UITextField, запрашивающий адрес электронной почты, и не было контекста.

Это необходимо сделать:

  1. Дайте View Controller имя, которое содержит что-то вроде "Register"
  2. У вас есть UITextField с textContentType = .emailaddress в контроллере вида
  3. У вас есть UITextField с textContentType = .password в контроллере вида, который не скрыт и доступен для редактирования во время создания регистра контроллера вида.

Нашим решением было скрыть текстовое поле пароля под текстовым полем электронной почты. Текстовое поле пароля должно быть как минимум на одну точку ниже текстового поля электронной почты, чтобы его можно было редактировать. Мы просто помещаем представление между адресом электронной почты и паролем, чтобы скрыть его.

После редактирования или выбора адреса электронной почты мы анимированно переместили текстовое поле пароля ниже текстового поля электронного письма.

Это начало растопить мой мозг, но, по крайней мере, мы нашли решение, которое сработало для нас.

...