Input 将NSString限制为数字以及#如果输入字符。(包括代码)

Input 将NSString限制为数字以及#如果输入字符。(包括代码),input,nsstring,uitextfield,limit,Input,Nsstring,Uitextfield,Limit,我在网站上搜索了我的答案, 然而,我认为这也是我陷入这个问题的原因 我试图将我的1和唯一文本字段限制为10个字符和唯一的数字 下面是这个网站上其他问题的代码。 我试图做的是将这些代码混合在一起,以达到我的极限 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSCharacterSet

我在网站上搜索了我的答案, 然而,我认为这也是我陷入这个问题的原因

我试图将我的1和唯一文本字段限制为10个字符和唯一的数字

下面是这个网站上其他问题的代码。 我试图做的是将这些代码混合在一起,以达到我的极限

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:LEGAL] invertedSet];
    NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
    NSString *newString = [myTextField.text stringByReplacingCharactersInRange:range withString:filtered]; 
    return !([newString length] > 10);
}
在单击我的文本字段之前,我的构建没有问题。。。但我得到了一个绿色箭头警告,“线程在断点1处停止” 我现在尝试了一些不同的事情,但现在我觉得我很难办,我希望这对这里的人来说是件很容易的事情

他们将单独(一个或另一个)使用下面的代码,但我似乎无法让他们一起工作

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString *newString = [myTextField.text stringByReplacingCharactersInRange:range withString:string];
    return !([newString length] > 10);
}
这会将我的输入限制为10 而且

这也将我的输入限制为数字,没有任何问题。 如果我把法律定义为只有数字

我就是不能让他们一起工作。。。
有人能帮我做这件事吗?

有很多方法可以做到这一点,但我认为这可能是最容易理解的:

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    // Check for non-numeric characters
    NSUInteger lengthOfString = string.length;
    for (NSInteger loopIndex = 0; loopIndex < lengthOfString; loopIndex++) {
        unichar character = [string characterAtIndex:loopIndex];
        if (character < 48) return NO; // 48 unichar for 0
        if (character > 57) return NO; // 57 unichar for 9
    }
    // Check for total length
    NSUInteger proposedNewLength = textField.text.length - range.length + string.length;
    if (proposedNewLength > 10) return NO;
    return YES;
}
-(BOOL)textField:(UITextField*)textField应更改字符范围:(NSRange)范围替换字符串:(NSString*)字符串{
//检查非数字字符
NSUTEGER lengthOfString=string.length;
对于(NSInteger loopIndex=0;loopIndex57)返回否;//57 unichar表示9
}
//检查总长度
NSUInteger proposedNewLength=textField.text.length-range.length+string.length;
如果(proposedNewLength>10)返回否;
返回YES;
}
第一部分主要检查非空字符串中不在“0”和“9”之间的字符,如果它在新字符串中的任何位置找到字符,则拒绝编辑。第二种方法确定编辑完成后文本的长度,如果文本长度太高,则将其与10进行比较,然后拒绝编辑。如果函数通过了所有这些测试,则允许进行编辑

在单击我的文本字段之前,我的构建没有问题。。。但是 我得到一个绿色箭头警告,说明“线程在断点1处停止”

显然,您已在
textField:shouldChangeCharactersRange:replacementString:
方法中设置了断点。如果您不熟悉断点,它们看起来是这样的:(行号列上的蓝色箭头),您可以使用右侧的按钮切换是否启用断点:


断点非常方便,我建议您学习使用它们。但现在只需单击断点并将其从列中拖动,就像从dock中拖动图标一样,或者关闭该选项。

Set-NSZombieEnable以获取确切的异常。它将在控制台中向您显示详细的异常。请找出并发布异常。您遇到了断点。您说它停止并说“线程在断点1处停止”。要么删除断点(通过点击Command+6可以很容易地找到),要么禁用断点。现在看来,惊人似乎很简单。。。但我决不会那样做。我希望我能投票!它工作得很好,我正在阅读断点。谢谢
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    // Check for non-numeric characters
    NSUInteger lengthOfString = string.length;
    for (NSInteger loopIndex = 0; loopIndex < lengthOfString; loopIndex++) {
        unichar character = [string characterAtIndex:loopIndex];
        if (character < 48) return NO; // 48 unichar for 0
        if (character > 57) return NO; // 57 unichar for 9
    }
    // Check for total length
    NSUInteger proposedNewLength = textField.text.length - range.length + string.length;
    if (proposedNewLength > 10) return NO;
    return YES;
}