【问题标题】:Is there a way to add domain suggestions for email when user type @ symbol in text field当用户在文本字段中输入@符号时,有没有办法为电子邮件添加域建议
【发布时间】:2019-10-08 04:53:19
【问题描述】:

我正在处理一种实现,例如我需要在 iOS 标准键盘上方添加域(如 gmail.com、hotmail.com、yahoo.com)建议。

我试图找到添加自动更正选项卡的方法。但是,没有运气。

请告诉我我们如何实现这一点。

【问题讨论】:

  • 在我看来,这个问题太笼统了,但谷歌的一个术语是“自动完成”,这里有一个类似的问题:stackoverflow.com/questions/35629285/…
  • 前提很简单(通常是这样)。随着用户输入的变化,只需使用大于和小于或等于查询您的可能性集合(即 gmail.com)针对该输入。如果集合包含大于当前输入且小于或等于该输入 + u{10ffff} 的字符串,则建议该字符串。
  • @JoakimDanielson 感谢您的回复。这与自动完成的文本有关。我正在寻找需要在 iOS 键盘上方显示的自动建议。
  • 我找到了使用键盘变量 inputAccessoryView 在键盘上方显示视图的方法。

标签: ios swift uikeyboard


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 2011-09-28
    • 2011-10-30
    • 2018-08-26
    • 1970-01-01
    • 2016-05-08
    相关资源
    最近更新 更多