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;