如何为现有UITextView打开和关闭autocorrectionType

时间:2011-07-29 01:30:41

标签: objective-c cocoa-touch uitextview autocorrect

我的iPhone应用程序中有一个UITextView,我希望能够切换autocorrectionType。

当用户编辑文本视图时,我希望将autocorrectionType设置为UIAutocorrectionTypeYes。 当没有编辑文本视图时,我希望将autocorrectionType设置为UIAutocorrectionTypeNo(因为我不希望自动更正生成的任何红点划线都可见)

只需切换autocorrectionType,如下所示:

myTextView.autocorrectionType = UITextAutocorrectionTypeYes;
myTextView.autocorrectionType = UITextAutocorrectionTypeNo;

似乎不起作用。 我何时可以切换autocorrectionType或在哪些情况下更改的autocorrectionType生效?是否存在限制?

修改

澄清: 初始化UITextView时,设置autocorrectionType没有问题。当我想要更改现有UITextView的autocorrectionType时,会出现问题。在我的情况下,我想在编辑UITextView时为用户提供自动更正的优势,但是当UITextView没有被编辑时,不希望用红色虚线下划线指出任何拼写错误 - 部分是因为我也在导出UIView包含UITextView作为图像。 问题是只更改我的UITextView的autocorrectionType属性的值不起作用。

4 个答案:

答案 0 :(得分:10)

这是为图像导出方案执行此操作的简便方法:

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView
{
    // Turn spell check on
    textView.autocorrectionType = UITextAutocorrectionTypeYes;
    return YES;
}


- (BOOL)textViewShouldEndEditing:(UITextView *)textView
{
    // Turn spell check off and clean up red squiggles.
    textView.autocorrectionType = UITextAutocorrectionTypeNo;
    NSString *currentText = textView.text;
    textView.text = @"";
    textView.text = currentText;
    return YES;
}

答案 1 :(得分:6)

您可以先尝试隐藏键盘然后重新显示。还要更新uitextview。如果[UITextView setNeedsDisplay]不适合你,请尝试[UITextView insertText:]然后[UITextView deleteBackward]

[textView resignFirstResponde];
textView.autocorrectionType = UITextAutocorrectionTypeNo;
[textView becomeFirstResponder];
[textView setNeedsDisplay];

[textView insertText:@" "];
[textView deleteBackward];

答案 2 :(得分:3)

除了将自动更正类型更改为UITextAutoCorrectionNo之外,还必须强制UITextView重新评估其更正状态。 setNeedsRedraw不足,但将文本设置为自身,例如

textView.autocorrectionType = UITextAutocorrectionTypeNo;
textView.text = textView.text;

使红色虚线消失。注意:此解决方法依赖于未记录的行为,并且不保证可以在将来的iOS版本上使用。

答案 3 :(得分:2)

更改-setNeedsDisplay后,请尝试在文本视图中调用autocorrectionType。这将强制文本视图重绘,并希望清除红色下划线。

myTextView.autocorrectionType = UITextAutocorrectionTypeNo;
[myTextView setNeedsDisplay];