Iphone UITextField只有整数

问题描述:

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

我得到的UITextField的整数值那样:(;)

int integer = [myUITexrtField.text intValue]; 

当我把一个角色还给我0和我不知道如何来检测它不仅数字。

我该怎么办?

+1

更改键盘类型为数字型.. – Swapnil 2010-04-27 10:11:48

+14

依靠数字键盘是不安全的,因为用户可能会将字符串数据粘贴到字段中,而不是使用键盘。 – Shoerob 2012-01-03 20:46:37

+1

数字键盘没有返回键要么... – 2012-04-13 12:26:14

+0

最后的答案是更accourate – 2012-04-15 02:07:38

您也可以使用UITextFieldDelegate方法

textField:shouldChangeCharactersInRange:replacementString:

住检查只出现数字键盘,每次的用户按一个键,它是一个简单的数字,以便他/她知道只有int值将被输入到该字段中。

+0

旋转的命中jeeva? – 2011-04-24 17:37:55

请务必设置您的文本字段代表

使用下列功能,确保用户可键入数字只有:

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

如果输入的第一个字符是字母,这不起作用。如果先输入一个数字,然后输入一个字母即可。 – GarethPrice 2011-09-24 01:59:01

实施shouldChangeCharactersInRange方法如下不允许用户输入非数字字符。

- (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 @“”]是为了支持退格键删除。

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

+9

启用删除:return([string stringByTrimmingCharactersInSet:nonNumberSet] .length> 0)|| [string isEqualToString:@“”]; – andershqst 2012-01-23 19:07:03

+7

唯一的问题是如果用户粘贴一个字符串,例如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; } – mbogh 2012-07-09 11:24:02

+0

@mbogh的评论应该是答案。 – septerr 2014-01-03 20:27:07

,只允许输入数字:

- (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)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    NSCharacterSet *nonNumberSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet]; 

    if ([string rangeOfCharacterFromSet:nonNumberSet].location != NSNotFound) 
    { 
     return NO; 
    } 
    return YES; 
} 
+1

答案在2年前提供并接受。请不要回答已经回答的旧问题,除非您有实质性补充内容。 – mah 2012-10-09 13:49:30

+0

你的回答给以前的回答增加了什么?为什么它很有价值,你认为应该是一个答案?这个问题已经有好几个高回报的答案了,为什么你不一样? – Yaroslav 2012-10-09 13:50:54

+1

这是一个非常快速的解决方案。不要忘记将textField委托添加到.h文件 – Chrizzz 2013-01-09 08:44:25

想要允许负数数字吗?

在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是不正确的。如果用户粘贴任何与AA号码如“1ABC”她的代码将打破

它应该是(允许替换只有当所有的字符是数字):

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