如果不需要从文本视图中退出第一响应者,并且您可以作为委托附加到文本视图,则可以实现方法
- (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
方法中有一些逻辑时,例如,当您解除自动更正时您不希望执行这些逻辑。