2012-03-12 6 views
1

デバイス上の自動修正のグローバル設定に関係なく、iPadアプリケーションでテキスト入力の自動修正を無効にしたいと考えています。 APIを使ってこれを行うには良い方法がありますか、アプリ全体を見て、すべてのテキスト入力フィールドを見つけて、各フィールドごとに個別にオフにするだけですか?アプリケーション内でオートコレクトをグローバルにオフにする

答えて

3

イム申し訳ありませんが、あなたはすべてのテキストフィールドを谷に行くと、それは

+0

のためのオートコレクトを無効にするUITextFieldカテゴリを作成することができ、提案されているようそれはもっと良い解決策でなければなりませんIMHO –

1

あなたはおそらくのUITextFieldのサブクラスを作成し、それをご希望のプロパティを設定することができます無効にする必要があります。 UITextFieldの代わりに、このサブクラス化されたバージョンを使用できます。

これは、まだアプリケーションの実装を開始していない場合に適しています。

+0

私は、悲しいかな、アプリケーションを開始し、自分のテキストフィールドを追加するプロジェクトの他のプログラマーに対して防衛する必要があります。それは良いアイデアですが、私はそれを他の状況で使用します。 –

+3

UITextFieldのカテゴリを追加するのはどうですか?カテゴリ内のオートコレクトを無効にします。 – cocoakomali

2

method swizzlingのビットを使用して、デフォルトのテキストフィールドのオートコレクションタイプを上書きできます。アプリのデリゲートにまたはどこか他の賢明な:

#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); 
}); 
0

@cocoakomaliは、あなたがのためにカテゴリを作成し、すべてのデフォルト

により、アプリで UITextField
@implementation UITextField (DisableAutoCorrect) 

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

@end 
+0

カテゴリクラスの指定された初期化子をオーバーライドしないでください。さらに悪いことに、カテゴリクラスはオーバーライドのためのものではなく、間もなく対立が生じます。 – DZenBot

+0

@DZenBot、カテゴリクラスは一般的にはオーバーライド用ではないと理解していますが、OPはオートコレクトをグローバルにオフにする方法を求めています。残念ながらアップルはこれを行う便利な方法を提供していないようです。おそらくこれを達成するための最も便利で合理的な解決策の1つです。 IMHO、私はこのカテゴリがデフォルトの 'init'の後に' setAutocorrectionType: 'への呼び出しを追加するだけなので、このカテゴリは競合に対して脆弱だとは思わないので、' [[[UITextField alloc] init] setAutocorrectionType:UITextAutocorrectionTypeNo] ' –

関連する問題