2

これは本当に奇妙で、私はこのばかげた小さな問題を理解しようとして、すでにほぼ丸一日を無駄にしています...ああ、これを掘り下げてくれる人からの助けが必要です:(

そのため、入力文字を小文字の英字、数字、およびアンダースコアのみに制限する必要がある 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 にスペースが入力されません (正しい動作)。ただし、(ランダムですが、これは最終的にトリガーされることがわかった1つの方法です...)3文字をすばやく入力し、スペースバーを数倍速く押すと、さらに3文字速く、次にスペースを押しますバーを数回押し、これを続けると、問題が発生します。例: 「abc (スペース)(スペース)(スペース) xyz (スペース)(スペース)(スペース) gbh(スペース)(スペース)(スペース)」と入力します。

これで、他のすべてのスペース バーのタッチは、そのすぐ上にある一番下のキー (通常は v、b、または n) の 1 つに触れているかのように動作します。そのため、スペース バーが押されて暗くなる (スペース バーを押したことを知らせる) 代わりに、実際にはこれらの他のキーの 1 つが暗くなり、v、b、または n がテキスト フィールドに入力されます。しかし、それは 1 回おきのスペース バー タップでのみ発生し、上記のシーケンス (または文字とスペース バーの試行のその他のランダムな組み合わせ) の後にのみ発生します。

これは非常に奇妙な問題であり、ここで説明するために最善を尽くしたと思います。ここで何か助けていただければ幸いです。また、何かが明確に説明されていない場合は、喜んで明確化を試みます。ありがとう

4

0 に答える 0