禁用 UITextField 的自动更正

Posted

技术标签:

【中文标题】禁用 UITextField 的自动更正【英文标题】:Disable auto correction of UITextField 【发布时间】:2009-05-05 23:02:33 【问题描述】:

当我尝试在我的 iPhone 应用程序 (UITextfield) 中编辑文本时,它会自动更正我的输入。

您能告诉我如何禁用此功能吗?

【问题讨论】:

【参考方案1】:
UITextField* f = [[UITextField alloc] init];
f.autocorrectionType = UITextAutocorrectionTypeNo;        

【讨论】:

如果你想关闭自动大写f.autocapitalizationType = UITextAutocapitalizationTypeNone; 您好@Caffeine,我们如何为 NSTextfield(Mac 应用)启用相同的选项?【参考方案2】:

斯威夫特版

我来到这里寻找 Swift 版本:

myInput.autocorrectionType = .No

另请阅读@MaikelS的答案

Swift 3.0

textField.autocorrectionType = .no

【讨论】:

【参考方案3】:

您可以使用UITextInputTraits 协议来实现:

myInput.autoCorrectionType = UITextAutocorrectionTypeNo;

更多详情请见here。

【讨论】:

【参考方案4】:

Interface Builder 还有一个下拉字段可以禁用此功能。由于您更有可能在界面构建器中创建文本字段,因此请在此处查找。您可以在“更正”旁边的属性检查器中找到它。

【讨论】:

【参考方案5】:

您还可以通过选择“属性检查器”在情节提要中进行设置,在“更正”下,您可以选择:“默认”、“是”和“否”

【讨论】:

【参考方案6】:
+ (void)disableAutoCorrectionsForTextfieldsAndTextViewGlobally 
  static dispatch_once_t onceToken;
  dispatch_once(&onceToken, ^
    struct objc_method_description autocorrectionTypeMethodDescription =
        protocol_getMethodDescription(@protocol(UITextInputTraits),
                                      @selector(autocorrectionType), NO, YES);
    IMP noAutocorrectionTypeIMP_TEXT_FIELD =
        imp_implementationWithBlock(^(UITextField *_self) 
          return UITextAutocorrectionTypeNo;
        );
    IMP noAutocorrectionTypeIMP_TEXT_VIEW =
        imp_implementationWithBlock(^(UITextView *_self) 
          return UITextAutocorrectionTypeNo;
        );
    class_replaceMethod([UITextField class], @selector(autocorrectionType),
                        noAutocorrectionTypeIMP_TEXT_FIELD,
                        autocorrectionTypeMethodDescription.types);
    class_replaceMethod([UITextView class], @selector(autocorrectionType),
                        noAutocorrectionTypeIMP_TEXT_VIEW,
                        autocorrectionTypeMethodDescription.types);
  );

【讨论】:

【参考方案7】:

在 SwiftUI 中,您可以使用 .disableAutocorrection(true) 修饰符。

Hiere 是一个真实的例子:

VStack 
    TextField("title", text: $LoginModel.email)
        .autocapitalization(.none)
        .disableAutocorrection(true)
        .foregroundColor(.white)

【讨论】:

【参考方案8】:

斯威夫特 5:

这就是我在项目中实现电子邮件地址字段的方式

private let emailTextField: UITextField = 
    let tf = CustomTextField(placeholder: "Email address")
    tf.keyboardType = .emailAddress
    tf.autocorrectionType = .no        //disable auto correction
    tf.autocapitalizationType = .none   //disable default capitalization
    return tf
()

CustomTextField 是我的扩展类(这里不重要)

【讨论】:

以上是关于禁用 UITextField 的自动更正的主要内容,如果未能解决你的问题,请参考以下文章

UITextField 的安全文本输入和自动更正之间的交互是啥?

自动更正文本时,UITextField 未调用 editorChanged 事件

如何在Edge中禁用自动更正?

如何在 Edge 中禁用自动更正?

在 Espresso 测试中禁用自动更正功能

可以通过我的 android 应用程序禁用用户键盘的自动更正吗?