Objective c 目标C:仅数字文本字段?
可能重复:Objective c 目标C:仅数字文本字段?,objective-c,ipad,numbers,uitextfield,validation,Objective C,Ipad,Numbers,Uitextfield,Validation,可能重复: 我想放置一个只接受数字(0-9,甚至不需要小数)的文本字段,但即使使用“数字键盘”输入选项,我仍然会得到一个带有各种符号的键盘。是否有更好的控制方法,是否有更好的控制方法,或者我只需手动验证输入?以下代码将允许您仅输入数字,并限制可使用的字符数 -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)str
我想放置一个只接受数字(0-9,甚至不需要小数)的文本字段,但即使使用“数字键盘”输入选项,我仍然会得到一个带有各种符号的键盘。是否有更好的控制方法,是否有更好的控制方法,或者我只需手动验证输入?以下代码将允许您仅输入数字,并限制可使用的字符数
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
/* limit to only numeric characters */
NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
for (int i = 0; i < [string length]; i++) {
unichar c = [string characterAtIndex:i];
if ([myCharSet characterIsMember:c]) {
return YES;
}
}
/* limit the users input to only 9 characters */
NSUInteger newLength = [customTextField.text length] + [string length] - range.length;
return (newLength > 9) ? NO : YES;
}
-(BOOL)textField:(UITextField*)textField应更改字符范围:(NSRange)范围替换字符串:(NSString*)字符串
{
/*仅限数字字符*/
NSCharacterSet*myCharSet=[NSCharacterSet characterSetWithCharactersInString:@“0123456789”];
对于(int i=0;i<[字符串长度];i++){
unichar c=[string characterAtIndex:i];
if([myCharSet成员:c]){
返回YES;
}
}
/*将用户输入限制为仅9个字符*/
NSUInteger newLength=[customTextField.text length]+[string length]-range.length;
返回(newLength>9)?否:是;
}
-(BOOL)textField:(UITextField*)textField应更改字符范围:(NSRange)范围替换字符串:(NSString*)字符串{
/*对于退格*/
如果([字符串长度]==0){
返回YES;
}
/*仅限数字字符*/
NSCharacterSet*myCharSet=[NSCharacterSet characterSetWithCharactersInString:@“0123456789”];
对于(int i=0;i<[字符串长度];i++){
unichar c=[string characterAtIndex:i];
if([myCharSet成员:c]){
返回YES;
}
}
返回否;
}
代码有点不正确,应该
/* limit to only numeric characters */
NSCharacterSet* numberCharSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
for (int i = 0; i < [string length]; ++i)
{
unichar c = [string characterAtIndex:i];
if (![numberCharSet characterIsMember:c])
{
return NO;
}
}
return YES;
/*仅限数字字符*/
NSCharacterSet*numberCharSet=[NSCharacterSet characterSetWithCharactersInString:@“0123456789”];
对于(int i=0;i<[字符串长度];++i)
{
unichar c=[string characterAtIndex:i];
如果(![numberCharSet成员:c])
{
返回否;
}
}
返回YES;
我认为使用此代码您不能使用BackSpace进行编辑。是的,从上面的代码中可以看出,您不能使用BackSpace,我已经在iPad应用程序上尝试了此方法。这可能是重复的,但答案对我更有效。此代码在逻辑上是错误的。您不希望在验证第一个字符后返回YES来中断循环。见郑德的答案。此代码错误,您在第一个有效字符后离开循环。与此相应,字符串“1dasdas”是有效的。谢谢你的快速片段。做得好,对我来说很好!这段代码中有一个bug。它返回替换字符串中的第一个数字字符。如果有人粘贴“123ABC”,它将扫描到“1”并返回“是”。郑德下面的回答是正确的,虽然它不允许退格。这就像是咒语:)这个看起来可以帮我检查所有的咒语。检查一下。。。这可能是公认的答案。确保将其放置在名为方法的ShouldChangeCharactersRange委托中。Apple文档建议您检查此委托方法中的数字。(来自ShouldChangeCharactersRange Apple doc)讨论每当用户操作导致其文本更改时,文本字段将调用此方法。使用此方法验证用户键入的文本。例如,您可以使用此方法防止用户输入数值以外的任何内容。我不认为这是重复的。链接问题询问如何检测测试字段中是否输入了非数字字符;此问题询问如何防止输入非数字字符。
/* limit to only numeric characters */
NSCharacterSet* numberCharSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
for (int i = 0; i < [string length]; ++i)
{
unichar c = [string characterAtIndex:i];
if (![numberCharSet characterIsMember:c])
{
return NO;
}
}
return YES;