1

ゲームのハイスコアテーブルにユーザー名を表示するために使用している、アクセント付き文字(éîüなど)や「¥」や©などの記号など、すべての文字が含まれていないビットマップフォントがあります。

UIKitキーボードを特定の文字に制限したり、UITextFieldで特定の文字のみを許可したりすることはできますか?それとも、自分の入力メカニズムをロールする必要がありますか?私は考えています、そして古い学校、アーケードスタイル、一度に一文字「もの」は大丈夫でしょう。

4

4 に答える 4

9

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];
}
于 2009-12-08T12:50:16.537 に答える
5

次のUITextFieldDelegateメソッドを使用してみてください。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
于 2009-12-07T23:55:02.907 に答える
1

を使用してみてUIKeyboardTypeNamePhonePadくださいUITextField。それには文字と数字しかありません:

textField.keyboardType = UIKeyboardTypeNamePhonePad;
于 2010-11-19T01:51:48.330 に答える
0

インターフェイスビルダーを使用すると、任意の関数で「変更された編集」のイベントをリンクして取得できます。これで、長さを確認できます

- (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;
    }

}
于 2010-09-16T08:50:12.210 に答える