Objective c 如何为现有UITextView打开和关闭自动更正类型

Objective c 如何为现有UITextView打开和关闭自动更正类型,objective-c,cocoa-touch,uitextview,autocorrect,Objective C,Cocoa Touch,Uitextview,Autocorrect,我的iPhone应用程序中有一个UITextView,我希望能够为其切换自动更正类型 当用户编辑文本视图时,我希望将autocorrectionType设置为UIAutocorrectionTypeYes。 当未编辑文本视图时,我希望自动更正类型设置为UIAutocorrectionTypeNo(因为我不希望自动更正生成的任何红色虚线下划线可见) 只需按如下方式切换自动更正类型: myTextView.autocorrectionType = UITextAutocorrectionTypeYe

我的iPhone应用程序中有一个UITextView,我希望能够为其切换自动更正类型

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

只需按如下方式切换自动更正类型:

myTextView.autocorrectionType = UITextAutocorrectionTypeYes;
myTextView.autocorrectionType = UITextAutocorrectionTypeNo;
似乎不起作用。 我何时可以切换自动更正类型,或者在什么情况下更改的自动更正类型生效,是否有限制

编辑:

澄清: 初始化UITextView时设置自动更正类型没有问题。当我想更改现有UITextView的自动更正类型时,问题就出现了。在我的例子中,我想让用户在编辑UITextView时具有自动更正的优势,但不想在未编辑UITextView时用红色虚线指出任何拼写错误,部分原因是我还将包含UITextView的UIView导出为图像。
问题是,仅仅更改UITextView的autocorrectionType属性的值是行不通的

更改
自动更正类型后,尝试在文本视图上调用
-setNeedsDisplay
。这将迫使文本视图重新绘制,并有望清除红色下划线

myTextView.autocorrectionType = UITextAutocorrectionTypeNo;
[myTextView setNeedsDisplay];

您可以尝试先隐藏键盘,然后再次显示。同时更新uitextview。如果[UITextView setNeedsDisplay]对您不起作用,请尝试[UITextView insertText:]然后[UITextView deleteBackward]

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


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

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

使红色虚线消失。注意:此解决方法依赖于未记录的行为,不保证在将来的iOS版本中工作。

对于图像导出场景,有一种简单的方法可以做到这一点:

- (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;
}

你应该使用spellCheckingType而不是autocorrectionType吗?这在iOS8中仍然有效吗?用户是否注意到键盘消失和出现了?
- (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;
}