我可以限制UITextField的字符集吗?

时间:2009-12-07 23:43:40

标签: iphone cocoa-touch uikit uitextfield uikeyboard

我有一个位图字体,它没有每一个字符,例如重音字符(éîü等)或符号,如“¥”或©我用来在Highscore表格中显示用户名一个游戏。

是否可以将UIKit键盘限制为某些字符,或者只允许UITextField中的某些字符?或者我是否必须推出自己的输入机制?我想和老派,街机风格,一次一个字母“东西”就可以了。

4 个答案:

答案 0 :(得分: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];
}

答案 1 :(得分:5)

您可以尝试使用以下UITextFieldDelegate方法:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;

答案 2 :(得分:1)

尝试使用UIKeyboardTypeNamePhonePad作为UITextField。它上面只有字母和数字:

textField.keyboardType = UIKeyboardTypeNamePhonePad;

答案 3 :(得分: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;
    }

}