Iphone UITextField只有整数

Rap*_*nto 16 iphone casting objective-c

我的IB中有一个UITextField,我想查看用户是否只输入了数字(没有字符)并得到整数值.

我得到了UITextField的整数值:

int integer = [myUITexrtField.text intValue];
Run Code Online (Sandbox Code Playgroud)

当我放一个字符(,;.)时它返回0并且我不知道如何检测它不仅仅是数字.

我能怎么做?

asl*_*nci 49

如下所示实现shouldChangeCharactersInRange方法不允许用户输入非数字字符.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    NSCharacterSet *nonNumberSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
    return ([string stringByTrimmingCharactersInSet:nonNumberSet].length > 0) || [string isEqualToString:@""];
}
Run Code Online (Sandbox Code Playgroud)

如果字符串是数字,则返回YES,否则返回NO.[string isEqualToString @""]是支持要删除的退格键.

我喜欢这种方法,因为它很干净.

  • 要启用delete:return([string stringByTrimmingCharactersInSet:nonNumberSet] .length> 0)|| [string isEqualToString:@""]; (9认同)
  • 唯一的问题是如果用户粘贴字符串,例如1n1a,stringByTrimmingCharactersInSet:将仅从字符串的开头和结尾删除.做类似的事情:NSRegularExpression*numbersOnly = [NSRegularExpression regularExpressionWithPattern:@"[0-9] +"options:NSRegularExpressionCaseInsensitive error:&error]; NSInteger numberOfMatches = [numbersOnly numberOfMatchesInString:string options:0 range:NSMakeRange(0,string.length)]; if(numberOfMatches!= 1 && string.length!= 0){shouldChange = NO; } (7认同)

小智 17

务必设置文本字段委托

使用以下功能确保用户只能输入数字:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{

    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
    [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];

    NSNumber* candidateNumber;

    NSString* candidateString = [textField.text stringByReplacingCharactersInRange:range withString:string];

    range = NSMakeRange(0, [candidateString length]);

    [numberFormatter getObjectValue:&candidateNumber forString:candidateString range:&range error:nil];

    if (([candidateString length] > 0) && (candidateNumber == nil || range.length < [candidateString length])) {

        return NO;
    }
    else 
    {
        return YES;
    }
}
Run Code Online (Sandbox Code Playgroud)


Fau*_*war 9

试试这个:它将阻止用户输入除数字之外的任何字符

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSCharacterSet *nonNumberSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];

   if ([string rangeOfCharacterFromSet:nonNumberSet].location != NSNotFound) 
   {
       return NO;
   }
   return YES;
}
Run Code Online (Sandbox Code Playgroud)


Lia*_*iam 4

http://rosettacode.org/wiki/Determine_if_a_string_is_numeric#Objective-C

或者您可以确保当焦点位于字段上时仅出现数字键盘

  • 依赖数字键盘并不安全,因为用户可能会将字符串数据粘贴到字段中,而不是使用键盘。 (15认同)