Iphone UITextField只有整数
我在我的IB有一个UITextField,我想检查用户是否只输入数字(无字符)并获取整数值。Iphone UITextField只有整数
我得到的UITextField的整数值那样:(;)
int integer = [myUITexrtField.text intValue];
当我把一个角色还给我0和我不知道如何来检测它不仅数字。
我该怎么办?
依靠数字键盘是不安全的,因为用户可能会将字符串数据粘贴到字段中,而不是使用键盘。 – Shoerob 2012-01-03 20:46:37
数字键盘没有返回键要么... – 2012-04-13 12:26:14
最后的答案是更accourate – 2012-04-15 02:07:38
您也可以使用UITextFieldDelegate方法
textField:shouldChangeCharactersInRange:replacementString:
住检查只出现数字键盘,每次的用户按一个键,它是一个简单的数字,以便他/她知道只有int值将被输入到该字段中。
旋转的命中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;
}
}
如果输入的第一个字符是字母,这不起作用。如果先输入一个数字,然后输入一个字母即可。 – 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 @“”]是为了支持退格键删除。
我喜欢这种方法,因为它很干净。
启用删除:return([string stringByTrimmingCharactersInSet:nonNumberSet] .length> 0)|| [string isEqualToString:@“”]; – andershqst 2012-01-23 19:07:03
唯一的问题是如果用户粘贴一个字符串,例如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
@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;
}
想要允许负数数字吗?
在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:@""];
}
更改键盘类型为数字型.. – Swapnil 2010-04-27 10:11:48