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

标签 ios cocoa-touch uitextview uitextinput

我正在使用 insertText: 自己做一些自定义自动完成的东西,但是如果有一个自动更正建议可见, View 就会进入一个奇怪的状态。

如果我使用 [textView unmarkText],它会关闭自动更正弹出窗口——但它会接受自动更正(这很糟糕)。有什么方法可以以编程方式拒绝自动更正建议吗?

我目前的“解决方案”有效,但它很粗糙而且很老套,我没有理由认为它在未来会继续有效。有更好的方法吗?

- (void)dismissAutocorrectSuggestionForTextView:(UITextView *)textView {
    NSRange range = textView.selectedRange;
    textView.text = textView.text;
    textView.selectedRange = range;
}

最佳答案

我尝试了与您类似的方法,但是以这种方式设置 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];
        }
    }
}

关于ios - 如何以编程方式关闭 UITextView 中的自动更正弹出窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12217805/

相关文章:

ios - Apple MDM OTA - 在配置文件中嵌入 SCEP 与 PKCS12 的身份证书

ios - 如何检测模拟器中运行的iPad pro?

ios - 如果我将指针设置为 nil,自动引用计数会释放一个对象吗?

ios - UITextview 的 textFieldShouldReturn 方法

iphone - 在 iOS 6 中关闭 uitextview 时崩溃

mysql - iOS 5 : How can I preserve newline while retrieving values from mysql via PHP in UITextView and UIWebView

objective-c - iOS 表格 View 中有很多单元格

ios - 在Air iOS中,.fla文件夹上方包含的文件夹的路径是什么?

objective-c - 在 iOS App info.plist 中使用预处理器定义

iphone - TouchXML 解析 XML 属性