如何以编程方式关闭UITextView中的自动更正弹出窗口?

Ian*_*nry 0 cocoa-touch uitextview ios uitextinput

我正在自己做一些自定义自动完成的东西insertText:,但是如果有一个自动更正的建议可见,则视图进入一个奇怪的状态.

如果我使用[textView unmarkText]它,它会解散自动更正弹出的东西 - 但它接受自动更正(这是坏的).有没有办法以编程方式拒绝自动更正建议?

我当前的"解决方案"有效,但它很粗糙,而且我没有理由认为它将来会继续发挥作用.有一个更好的方法吗?

- (void)dismissAutocorrectSuggestionForTextView:(UITextView *)textView {
    NSRange range = textView.selectedRange;
    textView.text = textView.text;
    textView.selectedRange = range;
}
Run Code Online (Sandbox Code Playgroud)

jun*_*jie 6

我尝试了类似于你的东西,但是以这种方式设置textView的文本会导致textView不必要地滚动(我的textView包含相当多的文本).我的解决方案涉及以非动画方式恢复contentOffset.它并不比你拥有的更优雅,但至少它可以帮助那些需要处理更长文本的人.

至于它是否会继续在未来继续工作,我从iOS 4开始尝试了类似的东西,并且它继续通过iOS 6工作.

- (void)rejectAutoCorrectSuggestionInTextView:(UITextView *)textView
{
    if ([textView isFirstResponder])
    {
        NSString *original = textView.text;
        NSRange originalRange = textView.selectedRange;
        CGPoint originalOffset = textView.contentOffset;

        // Force any pending autocorrection to be applied
        [textView resignFirstResponder];
        [textView becomeFirstResponder];

        NSString *final = textView.text;

        if (![original isEqualToString:final])
        {
            textView.text = original;
            textView.selectedRange = originalRange;
            [textView setContentOffset:originalOffset animated:NO];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)