Nitish
Nitish

Reputation: 14123

UITextField should have only positive number

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

Upvotes: 2

Views: 2407

Answers (5)

Afzaal Ahmad
Afzaal Ahmad

Reputation: 845

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
}

Upvotes: 0

beryllium
beryllium

Reputation: 29767

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;  
}

Upvotes: 1

Toastor
Toastor

Reputation: 8990

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.

Upvotes: 4

Bonny
Bonny

Reputation: 2038

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

Upvotes: 6

Fran Sevillano
Fran Sevillano

Reputation: 8163

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

Upvotes: 0

Related Questions