I need to validate a UITextField
. I want only positive integers to be entered in it. How can I achieve that?
I'd set up a NSNumberFormatter to retrieve a number from the UITextFields text property. Then get an intValue from the number and check whether it's >= 0.
Update:
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setLocale:[NSLocale currentLocale]];
NSNumber *number = [formatter numberFromString:[textField text]];
[formatter release];
This should get you going. I'm not on my development machine right now so I can't test run it, maybe you need to do one or two more lines of setup. Please refer to the reference library (I posted the link above) for the available options.
Use logic of this answer Toastor
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
if (string.characters.count == 0) {
return true
}
/// check number is postive
if (textField == self.txtPay) {
let formatter = NSNumberFormatter()
formatter.locale = NSLocale.currentLocale()
let findalString = (textField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string)
let number = formatter.numberFromString(findalString)
return number?.integerValue > 0
}
return true
}
Set delegate to your UITextField
ivar. Set keyboardType property to UIKeyboardTypeNumberPad
Write this code.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
if ([string isEqualToString:@"-"]){
return NO;
}
return YES;
}
From the top of my head:
Convert the string into a integer using [textField.text intValue]
and check it is positive.
I would do it in the - (BOOL)textFieldShouldEndEditing:(UITextField *)textField
method from the UITextFieldDelegate
protocol.
Cheers
Add UITextFieldDelegate,and add this code to your class
#define LEAGELNUM @"0123456789"
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:LEAGELNUM] invertedSet];
NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
BOOL basicTest = [string isEqualToString:filtered];
return basicTest;
}
LEAGELNUM means you can only write these words