UITextField should have only positive number

前端 未结 5 1652
执念已碎
执念已碎 2021-01-07 06:09

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

相关标签:
5条回答
  • 2021-01-07 06:29

    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.

    0 讨论(0)
  • 2021-01-07 06:38

    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 讨论(0)
  • 2021-01-07 06:44

    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;  
    }
    
    0 讨论(0)
  • 2021-01-07 06:45

    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

    0 讨论(0)
  • 2021-01-07 06:48

    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

    0 讨论(0)
提交回复
热议问题