Есть ли способ добавить предложения домена для электронной почты, когда пользователь вводит символ @ в текстовом поле - PullRequest
1 голос
/ 21 мая 2019

Я имею дело с одной реализацией, например, мне нужно добавить предложения домена (например, gmail.com, hotmail.com, yahoo.com) над стандартной клавиатурой iOS.

Я попытался найти способ добавить на вкладку автокоррекции. но не повезло.

Пожалуйста, дайте мне знать, как мы можем это реализовать.

1 Ответ

0 голосов
/ 22 мая 2019

Я использую UIScrollView для UITextField.inputAccessoryView и добавляю кнопки в scrollView, например:

emailBar.backgroundColor = UIColor(red: 0.952941, green: 0.952941, blue: 0.952941, alpha: 1.0)
textField.inputAccessoryView = emailBar

И добавляю UIButton для каждого провайдера электронной почты

var lastX: CGFloat = 8.0
let emailProviders = ["hotmail.com", "gmail.com", "yahoo.com", "mail.ru", "yahoo.com", "mail.ru"]
for provider in emailProviders {
    let button = UIButton()
    button.setTitle(provider, for: .normal)
    button.setTitleColor(UIColor(red: 0.0, green: 0.286275, blue: 1.0, alpha: 1.0), for: .normal)
    button.addTarget(self, action: #selector(appendEmailProvider(_:)), for: .touchUpInside)
    button.titleLabel?.font = UIFont.systemFont(ofSize: 16.0, weight: .light)
    button.sizeToFit()
    button.frame.origin = CGPoint(x: lastX, y: 4.0)
    emailBar.addSubview(button)
    lastX += button.frame.width + 12.0
}
emailBar.contentSize = CGSize(width: lastX, height: 32.0)

Далее мы добавляем события для UITextField

textField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
textField.addTarget(self, action: #selector(textFieldDidChange), for: .touchDown)

@objc func textFieldDidChange() {
    guard
        let selectedRange = textField.selectedTextRange,
        let pos1 = textField.position(from: selectedRange.end, offset: 0),
        let pos2 = textField.position(from: selectedRange.end, offset: -1),
        let range = textField.textRange(from: pos1, to: pos2),
        textField.text(in: range) == "@"
    else {
        emailBar.isHidden = true
        return
    }

    emailBar.contentOffset.x = 0
    emailBar.isHidden = false
}

@objc func appendEmailProvider(_ sender: UIButton) {
    if let textRange = textField.selectedTextRange, let provider = sender.title(for: .normal) {
        textField.replace(textRange, withText: provider)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...