带有自定义字符输入的UITextField的键盘/空格键错误行为

时间:2013-06-20 17:58:17

标签: ios uitextfield uikeyboard first-responder

这真是太奇怪了,我已经浪费了差不多整整一天试图找出这个荒谬的小问题......啊,我需要任何愿意深入研究的人的帮助:(

所以我有一个UITextField,我需要将输入字符限制为小写字母,数字和下划线。没有空格,但仍然允许退格/删除。这一切都可以正常使用以下代码:

'#define ALPHAStr @"abcdefghijklmnopqrstuvwxyz"
'#define NUMERICStr @"0123456789_"

创建NSCharacterSet:

_charactersStr = [NSString stringWithFormat:@"%@%@",ALPHAStr,NUMERICStr];
_allowedCharacters = [NSCharacterSet characterSetWithCharactersInString:_charactersStr];

对UITextField Entry实施限制:

- (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(space)(space)(space)xyz(space)(space)(space)gbh(space)(space)(space)”

现在,每个其他空格键触摸都会像触摸其上方的一个底部键(通常是v,b或n)一样。因此,不是显示空格键的按下变暗(让你知道你按空格键),它实际上是使这些其他键中的一个变暗并在文本字段中输入v,b或n。但它只发生在每隔一个空格键上,它只发生在上面提到的序列之后(或其他一些字母和空格键尝试的随机组合)。

这是一个非常奇怪的问题,我想我已尽力在这里解释一下。在这里任何帮助将不胜感激。如果我没有清楚地解释某些事情,我会很乐意尝试澄清。谢谢

0 个答案:

没有答案