在应用程序中关闭全局自动更正

时间:2012-03-12 15:52:08

标签: ios ipad

我想在iPad应用程序中禁用文本输入自动更正,无论设备上的自动更正的全局设置是什么。有没有一种方法可以通过API执行此操作,或者我只需要遍历整个应用程序,找到所有文本输入字段,并为每个字段单独关闭选项?

4 个答案:

答案 0 :(得分:3)

对不起,您必须浏览所有文本字段并将其禁用

答案 1 :(得分:2)

您可以使用method swizzling位覆盖默认文本字段autocorrection类型。在你的app delegate或其他合理的地方:

#import <objc/runtime.h>

// Prevent this code from being called multiple times
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    struct objc_method_description autocorrectionTypeMethodDescription = protocol_getMethodDescription(@protocol(UITextInputTraits), @selector(autocorrectionType), NO, YES);
    // (Re)implement `-[UITextField autocorrectionType]` to return `UITextAutocorrectionTypeNO`.
    IMP noAutocorrectionTypeIMP = imp_implementationWithBlock(^(UITextField *_self){ return UITextAutocorrectionTypeNo; });
    class_replaceMethod([UITextField class], @selector(autocorrectionType), noAutocorrectionTypeIMP, autocorrectionTypeMethodDescription.types);
});

答案 2 :(得分:1)

您可以将UITextField子类化并为其设置所需的属性。您可以使用此子类版本而不是UITextField。

如果您尚未开始实施申请,这可能是值得的!

答案 3 :(得分:0)

作为@cocoakomali建议,您可以创建UITextField类别,以便默认为应用中的所有UITextField停用自动更正

@implementation UITextField (DisableAutoCorrect)

- (instancetype)init {
  self = [super init];
  if (self) {
    [self setAutocorrectionType:UITextAutocorrectionTypeNo];
  }
  return self;
}

@end