テキスト ビューからファーストレスポンダを辞任することが望ましくなく、デリゲートとしてテキスト ビューにアタッチできる場合は、メソッドを実装できます。
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
そしてreturn NO
特定の場合。たとえば、次のことを試すことができます。
@implementation
{
BOOL _denyReplacements;
}
//////////////
- (void)dismissAutocorrectSuggestionForTextView:(UITextView *)textView {
NSRange rangeCopy = textView.selectedRange;
NSRange fakeRange = rangeCopy;
fakeRange.location--;
_denyReplacements = YES;
[textView unmarkText];
[textView setSelectedRange:fakeRange];
[textView setSelectedRange:rangeCopy];
_denyReplacements = NO;
}
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
return !_denyReplacements;
}
テキスト ビューの選択が変更されると、オートコンプリートは現在の候補を受け入れようとしますが、テキスト ビューは置換を行う前にこのメソッドを参照します。単に辞任/ファーストレスポンダーになる代わりにこれを行う理由の例は、たとえば、自動修正を却下するときに実行したくないロジックtextViewDidBeginEditing
やメソッドがある場合です。textViewDidEndEditing