我正在使用 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/