web-dev-qa-db-ja.com

UITextFieldキーボードショートカットの提案を無効にする

UITextFieldからキーボードショートカットの候補を削除する簡単な方法はありますか?

次のコマンドを使用すると、タイピングの修正を削除できます:[textField setAutocorrectionType:UITextAutocorrectionTypeNo];ただし、ショートカットへの影響はありません。

SharedMenuControllerに影響を与えても、これは抑制されません。

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
    [UIMenuController sharedMenuController].menuVisible = NO;
    return  NO;
}

enter image description here

20
Matt

UITextFieldDelegateメソッドを実装し、UITextFieldのtextプロパティを手動で設定することで、これを解決しました。

デフォルトでは、シミュレーターで"omw"と入力すると、この動作をテストできます"On my way!"と表示されます。次のコードはこれをブロックします。 注:自動修正スペルチェックも無効になっています。私の場合は問題ありませんでした。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    // Pass through backspace and character input
    if (range.length > 0 && [string isEqualToString:@""]) {
        textField.text = [textField.text substringToIndex:textField.text.length-1];
    } else {
        textField.text = [textField.text stringByAppendingString:string];
    }
    // Return NO to override default UITextField behaviors
    return NO;
}
2
Matt

Objective-C

textField.autocorrectionType = UITextAutocorrectionTypeNo;

スイフト

textField.autocorrectionType = .no

Documentationhttps://developer.Apple.com/library/ios/documentation/uikit/reference/UITextInputTraits_Protocol/Reference/UITextInputTraits.html

33
Lepidopteron

これだけを使う

  textField.autocorrectionType = UITextAutocorrectionTypeNo;
3
Parvendra Singh

AutocorrectionTypeを使用します。

[mailTextField setAutocorrectionType:UITextAutocorrectionTypeNo];

0

Swift 3.x以降:

textField.autocorrectionType = .no
0
Hemang
UITextField* f = [[UITextField alloc] init];
f.autocorrectionType = UITextAutocorrectionTypeNo;
0
Clad Clad
textField.autocorrectionType = .No
0
GregP

上記の回答は、切り取り/コピー/貼り付けの状況では機能しない場合があります。たとえば、UITextFieldでテキストをカットアンドペーストすると、デフォルトの機能とは異なります。

以下は同様のアプローチです:

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{

NSString *textFieldNewText = [textField.text stringByReplacingCharactersInRange:range withString:string];

    if ([string isEqualToString:@""]) {
        // return when something is being cut
        return YES;
    }
    else
    {
        //set text field text
        textField.text=textFieldNewText;
        range.location=range.location+[string length];
        range.length=0;
        [self selectTextInTextField:textField range:range];
    }
    return NO;
}


//for handling cursor position when setting textfield text through code
- (void)selectTextInTextField:(UITextField *)textField range:(NSRange)range {

    UITextPosition *from = [textField positionFromPosition:[textField beginningOfDocument] offset:range.location];
    UITextPosition *to = [textField positionFromPosition:from offset:range.length];
    [textField setSelectedTextRange:[textField textRangeFromPosition:from toPosition:to]];
}
0
Anmol Suneja