我对UITextField有问题。启用电子邮件自动完成选项后,我可以从列表中选择一封电子邮件,但是iOS会在文本字段的末尾自动添加空格。
是iOS漏洞还是我可以采取一些措施来防止这种情况发生? 附言我知道我可以处理文本更改并从字符串末尾删除空白,但是我正在寻找本机方法。
答案 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}
/>