ゲームのハイスコアテーブルにユーザー名を表示するために使用している、アクセント付き文字(éîüなど)や「¥」や©などの記号など、すべての文字が含まれていないビットマップフォントがあります。
UIKitキーボードを特定の文字に制限したり、UITextFieldで特定の文字のみを許可したりすることはできますか?それとも、自分の入力メカニズムをロールする必要がありますか?私は考えています、そして古い学校、アーケードスタイル、一度に一文字「もの」は大丈夫でしょう。
ゲームのハイスコアテーブルにユーザー名を表示するために使用している、アクセント付き文字(éîüなど)や「¥」や©などの記号など、すべての文字が含まれていないビットマップフォントがあります。
UIKitキーボードを特定の文字に制限したり、UITextFieldで特定の文字のみを許可したりすることはできますか?それとも、自分の入力メカニズムをロールする必要がありますか?私は考えています、そして古い学校、アーケードスタイル、一度に一文字「もの」は大丈夫でしょう。
intregus が言及した UITextFieldDelegate メソッドを使用すると、これを非常に簡単に行うことができます。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
// Only characters in the NSCharacterSet you choose will insertable.
NSCharacterSet *invalidCharSet = [[NSCharacterSet characterSetWithCharactersInString:@"abcdefgABCDEFG"] invertedSet];
NSString *filtered = [[string componentsSeparatedByCharactersInSet:invalidCharSet] componentsJoinedByString:@""];
return [string isEqualToString:filtered];
}
次のUITextFieldDelegateメソッドを使用してみてください。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
を使用してみてUIKeyboardTypeNamePhonePad
くださいUITextField
。それには文字と数字しかありません:
textField.keyboardType = UIKeyboardTypeNamePhonePad;
インターフェイスビルダーを使用すると、任意の関数で「変更された編集」のイベントをリンクして取得できます。これで、長さを確認できます
- (IBAction)onValueChange:(id)sender
{
NSString *text = nil;
int MAX_LENGTH = 20;
switch ([sender tag] )
{
case 1:
{
text = myEditField.text;
if (MAX_LENGTH < [text length]) {
myEditField.text = [text substringToIndex:MAX_LENGTH];
}
}
break;
default:
break;
}
}