开发者

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?


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


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.


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


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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜