Iphone UITextField仅限整数

Iphone UITextField仅限整数,iphone,objective-c,casting,Iphone,Objective C,Casting,我的IB中有一个UITextField,我想检查用户是否只输入数字(无字符)并获取整数值 我得到UITextField的整数值如下: int integer = [myUITexrtField.text intValue]; 当我输入一个字符(,;)时,它会返回0,我不知道如何检测它不仅仅是数字 我该怎么办? 或者,您可以确保当焦点出现在字段上时,仅显示数字键盘您也可以使用UITextFieldDelegate方法 textField:ShouldChangeCharactersRange:r

我的IB中有一个UITextField,我想检查用户是否只输入数字(无字符)并获取整数值

我得到UITextField的整数值如下:

int integer = [myUITexrtField.text intValue];
当我输入一个字符(,;)时,它会返回0,我不知道如何检测它不仅仅是数字

我该怎么办?


或者,您可以确保当焦点出现在字段上时,仅显示数字键盘

您也可以使用UITextFieldDelegate方法

textField:ShouldChangeCharactersRange:replacementString:


要实时检查用户每次按键是否为简单数字,以便他/她知道字段中只需输入int值。

请确保设置文本字段

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

- (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;
    }
}
-(BOOL)textField:(UITextField*)textField应更改字符范围:(NSRange)范围替换字符串:(NSString*)字符串
{
NSNumberFormatter*numberFormatter=[[NSNumberFormatter alloc]init];
[NumberFormatterSetNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber*候选编号;
NSString*candidateString=[textField.text StringByReplacingCharactersRange:range with string:string];
范围=NSMakeRange(0,[候选测试环长度]);
[numberFormatter getObjectValue:&candidateNumber for字符串:CandidateTestString范围:&range错误:nil];
如果(([candidateString length]>0)和&(candidateNumber==nil | | range.length<[candidateString length])){
返回否;
}
其他的
{
返回YES;
}
}

实现如下ShouldChangeCharactersRange方法不允许用户输入非数字字符

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    NSCharacterSet *nonNumberSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
    return ([string stringByTrimmingCharactersInSet:nonNumberSet].length > 0) || [string isEqualToString:@""];
}
如果字符串是数字,则返回YES,否则返回NO。[string isEqualToString@”“]支持删除退格键


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

只允许数字输入:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    return [string isEqualToString:@""] || 
        ([string stringByTrimmingCharactersInSet:
            [[NSCharacterSet decimalDigitCharacterSet] invertedSet]].length > 0);
}
要测试整数,请执行以下操作:

- (BOOL)isNumeric:(NSString *)input {
    for (int i = 0; i < [input length]; i++) {
        char c = [input characterAtIndex:i];
        // Allow a leading '-' for negative integers
        if (!((c == '-' && i == 0) || (c >= '0' && c <= '9'))) {
            return NO;
        }
    }
    return YES;
}
-(BOOL)是数字:(NSString*)输入{
对于(int i=0;i<[输入长度];i++){
字符c=[输入字符索引:i];
//允许负整数使用前导“-”

如果(!((c=='-'&&i==0)| |(c>='0'&&c尝试此操作:它将停止用户输入除数字以外的任何字符

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

是否也要允许负数

详细说明davsan的答案,这里有一个支持输入负数和正数的解决方案,并且不允许输入任何其他数字

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

    return YES;
}

此代码也适用于本地化

  - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    {
        if([string isEqualToString:@""]) return YES;
        NSCharacterSet *characterSet = nil;
        characterSet = [NSCharacterSet decimalDigitCharacterSet];
        NSRange location = [string rangeOfCharacterFromSet:characterSet];
        return (location.location != NSNotFound);

        if(characterSet == nil) return YES;
        return YES;

    }

@devsan的回答不正确。如果用户粘贴任何带有数字(如“1abc”)的内容,则其代码将中断

应为(仅当所有字符均为数字时才允许更换):


如果键入的第一个字符是字母,则此操作不起作用。如果先键入数字,然后再键入字母,则此操作有效。但是,依赖数字键盘并不安全,因为用户可能会将字符串数据粘贴到字段中,而不必使用键盘。最后一个答案是更方便的将键盘类型更改为数字类型..启用e delete:return([string StringByTrimmingCharactersSet:nonNumberSet].length>0)|[string IseQualString:@”“];唯一的问题是如果用户粘贴到字符串中,例如1n1a,StringByTrimmingCharactersSet:将仅从字符串的开头和结尾删除。执行类似操作:nsregularePression*NumberOnly=[NSRegularExpression regular expression with pattern:@“[0-9]+”选项:NSRegularExpression不区分大小写错误:&error];NSInteger numberOfMatches=[numbersOnly numberOfMatches安装:字符串选项:0范围:NSMakeRange(0,string.length)];if(numberOfMatches!=1&&string.length!=0){shouldChange=NO;}@mbogh的注释应该是答案。或者,您可以将第二行更改为
return[stringstringbytrimmingcharactersinset:numbers].length==string.length;
答案是在两年前提供并接受的。除非你有实质性的补充,否则请不要回答已经回答过的老问题。你的答案对以前的问题有什么补充?为什么有价值,你认为应该是答案?已经有几个高票的答案了对于这个问题,为什么您的不同?这是一个很快实现的解决方案。不要忘记将textField委托添加到.h文件中
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSCharacterSet *nonNumberSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
return ([string stringByTrimmingCharactersInSet:nonNumberSet].length == string.length) || [string isEqualToString:@""];
}