iOS TextField-自动完成功能添加空白字符

时间:2018-07-09 19:09:44

标签: ios email uitextfield autosuggest

我对UITextField有问题。启用电子邮件自动完成选项后,我可以从列表中选择一封电子邮件,但是iOS会在文本字段的末尾自动添加空格。

是iOS漏洞还是我可以采取一些措施来防止这种情况发生? 附言我知道我可以处理文本更改并从字符串末尾删除空白,但是我正在寻找本机方法。

enter image description here enter image description here

5 个答案:

答案 0 :(得分:4)

智能建议的默认行为是在提供的文本后添加一个空格,这样,如果您正在写一个句子,则在选择建议后不必打空格。

我建议您删除空格,以便即使用户尝试输入空格也将被丢弃。

您可以通过在更改文本后以编程方式更改文本来实现:

在控制器的.history的文本字段中添加目标

viewDidLoad

答案 1 :(得分:0)

我还没有找到解决此问题的方法。老实说,我没花很多时间。我仍在从事一个项目,因此我正在处理其他功能,因此我将这个问题留在了待机状态。我们可以将其视为Apple错误。顺便说一句,电子邮件文本字段提供了一种输入空格的方式,我不知道为什么,因为电子邮件地址不包含空格。目前,我有一个想法可以解决此问题,方法是在编辑后而不是在编辑过程中固定电子邮件地址。

例如,我可以接受此电子邮件,其中包含空白字符作为自动完成的输入,但是当我保存该电子邮件或将电子邮件发送到该地址时,可以删除空白。

答案 2 :(得分:0)

如果您对此进行了搜索,并且正在使用React Native,则在保存并验证它时需要.trim()

例如如果呈现电子邮件的TextInput字段:

     <TextInput
            ref={(input) => {
              this.emailTextInput = input;
            }}
            clearButtonMode={'while-editing'}
            autoComplete={"email"}
            textContentType={"emailAddress"}
            keyboardType={"email-address"}
            placeholder={"Email"}
            maxLength={100}
            onChangeText={email => this.validateAndSet("email", email)}
          />

,然后在onChange / Validation函数中确保修剪值:

  validateAndSet(key, value) {

    // do validations, mark fields as invalid, etc.

    this.setState({ [key]: value });

    if (key === 'email') {
      this.setState({email: value.trim()})
    }
  }

答案 3 :(得分:0)

从QuickType栏中选择的任何文本都会添加一个空格,我想是为了避免每次都必须手动添加空格。我想,期望iOS巧妙地不增加空间会不利于这种便利。如果添加句点,至少会自动删除该空格。

我通过创建所有应用程序文本字段UITextField的子类来解决此问题:

import UIKit

class ApplicationTextField: UITextField {

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        NotificationCenter.default.addObserver(self, selector: #selector(didEndEditing(notification:)), name: UITextField.textDidEndEditingNotification, object: nil)
    }

    @objc private func didEndEditing(notification:Notification) {
        self.text = self.text?.trimmingCharacters(in: .whitespaces)
    }
}

要允许其他对象实现UITextFieldDelegate,我使用NotificationCenter并观察didEndEditing(notification:)通知。

答案 4 :(得分:0)

我通过检查props.textContentType ==“ emailAddress”来解决与redux-form的react-native问题,如下所示:

 <TextInput

            {...props}
            onChangeText={props.input.onChange}
            value={props.textContentType == "emailAddress"? props.input.value.trim(): props.input.value}
        />