iPhone: Issue disabling Auto-Cap/autocorrect on a UITextField
IosObjective CIphoneUitextfieldIos 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:
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.