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

Iphone 我可以限制UITextField的字符集吗?,iphone,cocoa-touch,uikit,uitextfield,uikeyboard,Iphone,Cocoa Touch,Uikit,Uitextfield,Uikeyboard,我有一种位图字体,它不是每个字符都有,比如重音字符éîü等,或者像¥或©这样的符号,我用来在游戏的高分表中显示用户名 是否可以将UIKit键盘限制为某些字符,或仅允许UITextField中的某些字符?还是我必须推出自己的输入机制?我在想,老式的、拱廊式的、一次只写一个字母就可以了。您可以尝试使用以下UITextFieldDelegate方法: - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NS

我有一种位图字体,它不是每个字符都有,比如重音字符éîü等,或者像¥或©这样的符号,我用来在游戏的高分表中显示用户名


是否可以将UIKit键盘限制为某些字符,或仅允许UITextField中的某些字符?还是我必须推出自己的输入机制?我在想,老式的、拱廊式的、一次只写一个字母就可以了。

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

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

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

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

使用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];
}

使用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];
}

使用Interface builder,您可以在任何函数中链接并获取要编辑的事件。现在你可以检查长度了

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

}

使用Interface builder,您可以在任何函数中链接并获取要编辑的事件。现在你可以检查长度了

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

}
尝试为UIExtField使用UIKeyboardTypeNamePhonePad。上面只有字母和数字:

textField.keyboardType = UIKeyboardTypeNamePhonePad;
尝试为UIExtField使用UIKeyboardTypeNamePhonePad。上面只有字母和数字:

textField.keyboardType = UIKeyboardTypeNamePhonePad;

我明白你的意思;但由于全世界iPhone用户可使用的字符数量之多,这一范围将是巨大的。我只是想用一种已安装的字体来代替。不过还是谢谢你。我明白你的意思了;但由于全世界iPhone用户可使用的字符数量之多,这一范围将是巨大的。我只是想用一种已安装的字体来代替。不过还是谢谢你。