我想限制用户可以在iPhone键盘中输入的字符,所以我创建了一个自己的数组。例如该数组包括0~9和一个点,使用户可以输入价格。如果替换字符串不在数组中,我可以return NO
-(BOOL)textField:shouldChangeCharactersInRange:replacementString:
。
问题是当我使用此数组过滤文本时,也会禁用退格按钮。有关如何启用退格按钮的任何想法?
另一个问题是我想让用户输入他们的名字,因此我不想让他们切换到数字和标点符号(如果我使用数组进行过滤,则退格按钮也会被锁定)。如何禁用键盘上的开关按钮(现在我只是限制它们键入一个~z,空白和“。”,但我认为禁用开关按钮可能是更好的方法)?
答案 0 :(得分:1)
我找到了一种方法(可能不够好,但它可以完成退格函数的工作):
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if(textField == txtChargeAmt)
{
if(string.length == 0) //backspace button is pressed
{
textField.text = [textField.text substringToIndex:(textField.text.length - 1)];
return NO;
}
for(NSString *s in arrNumberAndDot)
{
if([string isEqualToString:s])
{
return YES;
}
}
return NO;
}
else
return YES;
}
欢迎关于退格问题的其他想法。那么如何禁用开关按钮?
答案 1 :(得分:0)
我想我不确定为什么你会想要为这两种不同类型的输入使用相同的TextField。
我会有两个字段,一个用于输入名称的字母数字字段和一个用于输入数字的数字字段。
或者我没有收到你的问题?
答案 2 :(得分:0)
这将做你想要的更简洁(和有效):
- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string
{
NSCharacterSet *validCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@".0123456789"];
BOOL shouldChange =
[string length] == 0 || // deletion
textField != txtChargeAmt || // not the field we care about
[string rangeOfCharacterFromSet:validCharacterSet].location != NSNotFound;
if (!shouldChange)
{
// Tell the user they did something wrong. There's no NSBeep()
// on the iPhone :(
}
return shouldChange;
}
我会在其他地方构建这个角色,所以你只需要做一次,但你明白了。任何人都有任何想法,如何提醒用户他们使用了无效的字符?我正试图解决类似的问题。