2

I need to validate a UITextField. I want only positive integers to be entered in it. How can I achieve that?

halfer
  • 19,824
  • 17
  • 99
  • 186
Nitish
  • 13,845
  • 28
  • 135
  • 263

5 Answers5

6

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

Bonny
  • 2,038
  • 1
  • 14
  • 15
  • Hey that one's pretty good! Even better than my approach, +1 for you! – Toastor Aug 05 '11 at 10:15
  • Hey what if I only want to limit one text box but use another to enter text? – Wez Apr 15 '12 at 11:50
  • 1
    @Wezly you can check whether the textField is the instance you need to limit. use `if(textField == xxx)` or use its tag like `if(textField.tag == xxx.tag)` xxx is your textField instance. – Bonny Apr 16 '12 at 01:28
  • In case it is not known, `LEAGELNUM` is a mispelling. I think you meant `LEGALNUM`. – halfer Aug 29 '17 at 22:12
4

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.

Toastor
  • 8,980
  • 4
  • 50
  • 82
1

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;  
}
beryllium
  • 29,669
  • 15
  • 106
  • 125
0

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
}
Community
  • 1
  • 1
Afzaal Ahmad
  • 816
  • 10
  • 16
0

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

Fran Sevillano
  • 8,103
  • 4
  • 31
  • 45