这真的很奇怪,我已经浪费了几乎一整天的时间来试图弄清楚这个荒谬的小问题......啊,我需要任何愿意深入研究的人的帮助:(
所以我有一个 UITextField,我需要将输入字符限制为小写字母、数字和下划线。没有空格,但仍然允许退格/删除。这一切都与下面的代码工作正常:
'#define ALPHAStr @"abcdefghijklmnopqrstuvwxyz"
'#define NUMERICStr @"0123456789_"
创建 NSCharacterSet:
_charactersStr = [NSString stringWithFormat:@"%@%@",ALPHAStr,NUMERICStr];
_allowedCharacters = [NSCharacterSet characterSetWithCharactersInString:_charactersStr];
对 UITextField 条目实施限制:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if (textField == self.entryTxtField){
if (string.length == 0 && range.length > 0) { /*this is to allow backspace*/
return YES;
}
else { /*this limits the input to only allowed characters*/
return ([string rangeOfCharacterFromSet:_allowedCharacters].location != NSNotFound);
}
}
else {
return NO;
}
}
所以乍一看这似乎很好用......但我注意到一个非常奇怪的问题,我不确定这是否是 iOS 6 中的错误......
此代码禁用了空格键,起初它工作正常,触摸空格键会显示键阴影并发出点击声,但它不会在 UITextField 中输入空格(正确行为)。但是,(它是随机的,但这是我发现最终会触发它的一种方式......)如果你快速输入 3 个字母,然后快速按几次空格键......然后再快速输入 3 个字母,然后空格扎了几次,继续这个,问题开始了。例如:输入“abc(空格)(空格)(空格)xyz(空格)(空格)(空格)gbh(空格)(空格)(空格)”
现在,每一次其他空格键的触摸都会表现得好像您正在触摸它正上方的底部键之一(通常是 v、b 或 n)。因此,它实际上不是显示空格键的按下变暗(让您知道您按下了空格键),而是将这些其他键之一变暗并在文本字段中输入 v、b 或 n。但它只会在每隔一个空格键敲击时发生,并且仅在上述序列(或其他字母和空格键尝试的其他随机组合)之后发生。
这是一个非常奇怪的问题,我想我已经尽力在这里解释了。任何帮助在这里都将不胜感激。如果我没有解释清楚,我很乐意尝试澄清。谢谢