iPhone: Issue disabling Auto-Cap/autocorrect on a UITextField

IosObjective CIphoneUitextfield

Ios Problem Overview


For some reason, even though I disable the auto-cap and auto-correct of my UITextField, it's still capitalizing the first letter of my input.

Here is the code:

UITextField* textField = [[[UITextField alloc] initWithFrame:CGRectMake(90.0, 10.0, 213.0, 25.0)] autorelease];
[textField setClearButtonMode:UITextFieldViewModeWhileEditing];
textField.returnKeyType = UIReturnKeyGo;
textField.autocorrectionType = FALSE;
textField.autocapitalizationType = UITextAutocapitalizationTypeNone;
textField.delegate = self;
if (inputFieldType == Email) {
    label.text = @"Email:";
    textField.keyboardType = UIKeyboardTypeEmailAddress;
    emailTextField  = textField;
    textField.placeholder = @"Email Address";
} else { // password
    textField.secureTextEntry = TRUE;
    label.text = @"Password:";
    if (inputFieldType == Password){
        textField.placeholder = @"Password";
        passwordTextField  = textField;
    }
    if (inputFieldType == ConfirmPassword){
        textField.placeholder = @"Confirm Password";
        confirmPasswordTextField  = textField;
    }
    
}

See screenshot: alt text

Ios Solutions


Solution 1 - Ios

You're setting autocorrectionType to FALSE as if it were a BOOL, but it actually has type UITextAutocorrectionType. So FALSE is being interpreted as UITextAutocorrectionTypeDefault, which means that autocorrection is probably enabled.

I bet it found the name "Phil" in your address book and is autocorrecting the capitalization to match.

Solution 2 - Ios

Objective - C

-(void)textFieldDidBeginEditing:(UITextField *)textField
{
    textField.autocorrectionType = FALSE; // or use  UITextAutocorrectionTypeNo
    textField.autocapitalizationType = UITextAutocapitalizationTypeNone;

}

Swift

func textFieldDidBeginEditing(textfield : UITextField)
{
    textField.autocorrectionType = .No
    textField.autocapitalizationType = .None
    textField.spellCheckingType = .No
}

Swift3

  func textFieldDidBeginEditing(_ textField : UITextField)
{
    textField.autocorrectionType = .no
    textField.autocapitalizationType = .none
    textField.spellCheckingType = .no
}

Solution 3 - Ios

yourTextFieldName.autocorrectionType = UITextAutocorrectionTypeNo;
yourTextFieldName.autocapitalizationType = UITextAutocapitalizationTypeNone;

Solution 4 - Ios

Updated the correct answer for Swift 5

    textField.autocorrectionType = .no
    textField.autocapitalizationType = .none
    textField.spellCheckingType = .no

Solution 5 - Ios

Swift 2:

textField.autocorrectionType = .No
textField.autocapitalizationType = .None

Solution 6 - Ios

If you wish to disable Auto-Cap/autocorrect on a UITextField for whole project,

then make a class which will inherit the UITextField class and init method set the autoCorrectionType to "no".

Class AppTextField: UITextField {

     override init(frame: CGRect) {
         super.init(frame: frame)
        
         //setting the autocorrection to no
          self.autocorrectionType = .no
      }
}

Then in storyboard set the cusotom class for textfield to AppTextField.

enter image description here

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionphil swensonView Question on Stackoverflow
Solution 1 - IosTomView Answer on Stackoverflow
Solution 2 - IosAnbu.KarthikView Answer on Stackoverflow
Solution 3 - IosSubham93View Answer on Stackoverflow
Solution 4 - IosChris PeragineView Answer on Stackoverflow
Solution 5 - IosMaxamilian DemianView Answer on Stackoverflow
Solution 6 - IosVikash SinhaView Answer on Stackoverflow