UITextField
からキーボードショートカットの候補を削除する簡単な方法はありますか?
次のコマンドを使用すると、タイピングの修正を削除できます:[textField setAutocorrectionType:UITextAutocorrectionTypeNo];
ただし、ショートカットへの影響はありません。
SharedMenuControllerに影響を与えても、これは抑制されません。
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
[UIMenuController sharedMenuController].menuVisible = NO;
return NO;
}
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;
}
Objective-C
textField.autocorrectionType = UITextAutocorrectionTypeNo;
スイフト
textField.autocorrectionType = .no
これだけを使う
textField.autocorrectionType = UITextAutocorrectionTypeNo;
AutocorrectionTypeを使用します。
[mailTextField setAutocorrectionType:UITextAutocorrectionTypeNo];
Swift 3.x以降:
textField.autocorrectionType = .no
UITextField* f = [[UITextField alloc] init];
f.autocorrectionType = UITextAutocorrectionTypeNo;
textField.autocorrectionType = .No
上記の回答は、切り取り/コピー/貼り付けの状況では機能しない場合があります。たとえば、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]];
}