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