Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to toggle autocorrectionType on and off for an existing UITextView

I have a UITextView in my iPhone app for which I want to be able to toggle the autocorrectionType.

When a user is editing the text view, I want the autocorrectionType to be set to UIAutocorrectionTypeYes. When the text view is not being edited, I want the autocorrectionType to be set to UIAutocorrectionTypeNo (because I don't want any of the red-dotted underlines generated by autocorrection to be visible)

Simply toggling the autocorrectionType like this:

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

Doesn't seem to work. Are there limitations on when I can toggle the autocorrectionType or in which situations the changed autocorrectionType takes effect?

EDIT:

To clarify: There are no issues setting the autocorrectionType when initializing the UITextView. The problem arises when I want to change the autocorrectionType for an existing UITextView. In my case I want to give users the advantage of autocorrection when they edit a UITextView, but don't want any spelling errors pointed out with the red-dotted underlines when the UITextView is not being edited - in part because I am also exporting a UIView containing the UITextView as an image. The problem is that just changing the value of my UITextView's autocorrectionType property doesn't work.

like image 874
adriaan Avatar asked Jul 29 '11 01:07

adriaan


2 Answers

Here's an easy way to do this for the image export scenario :

- (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;
}
like image 183
DavidAWalsh Avatar answered Sep 28 '22 01:09

DavidAWalsh


You can try to first hide the keyboard first and then displaying it again. Also update the uitextview. If [UITextView setNeedsDisplay] doesn't work for you, try [UITextView insertText:] and then [UITextView deleteBackward]

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

or

[textView insertText:@" "];
[textView deleteBackward];
like image 37
bollhav Avatar answered Sep 28 '22 03:09

bollhav