我在网站上搜索了我的答案, 但我认为这也是我如何解决这个问题。
我正在尝试将我的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
{
NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:LEGAL] invertedSet];
NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
return [string isEqualToString:filtered];
}
这也限制了我对数字的输入只是没有问题。 只要我将LEGAL定义为数字......
我似乎无法让他们一起工作...... 任何人都可以帮我这个吗?
答案 0 :(得分:1)
有很多方法可以做到这一点,但我认为这可能是最容易理解的:
-(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;
}
第一部分基本上检查一个非空字符串,查找不在'0'和'9'之间的字符,如果它在新字符串中找到一个拒绝编辑的字符串。第二个确定编辑完成后文本的长度是多少,如果是高则比较为10,它拒绝编辑。如果函数通过了所有这些测试,则允许编辑。
我的构建没有问题,直到我点击我的文本字段...但是 我收到一个绿色箭头警告,说明
" thread stopped at breakpoint 1 "
您显然已在textField:shouldChangeCharactersInRange:replacementString:
方法中设置了断点。如果您不熟悉断点,它们看起来像这样:(行号列上的蓝色箭头)您可以使用右图所示的按钮切换它们是否已启用:
断点非常方便,我建议你学会使用它们。但是现在只需单击断点并将其从列中拖出,就像从停靠栏中的图标一样,或者关闭该选项。