これは本当に奇妙で、私はこのばかげた小さな問題を理解しようとして、すでにほぼ丸一日を無駄にしています...ああ、これを掘り下げてくれる人からの助けが必要です:(
そのため、入力文字を小文字の英字、数字、およびアンダースコアのみに制限する必要がある 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 回おきのスペース バー タップでのみ発生し、上記のシーケンス (または文字とスペース バーの試行のその他のランダムな組み合わせ) の後にのみ発生します。
これは非常に奇妙な問題であり、ここで説明するために最善を尽くしたと思います。ここで何か助けていただければ幸いです。また、何かが明確に説明されていない場合は、喜んで明確化を試みます。ありがとう