Могу ли я ограничить набор символов для UITextField? - PullRequest
1 голос
/ 08 декабря 2009

У меня есть растровый шрифт, в котором не все символы, такие как акцентированные символы (é î ü и т. Д.) Или символы, такие как «¥» или ©, которые я использую для отображения имен пользователей в таблице рекордов для игра.

Можно ли ограничить клавиатуру UIKit определенными символами или разрешить только определенные символы в UITextField? Или мне придется свернуть свой собственный механизм ввода? Я думаю, и в старой школе, в стиле аркады, одна буква за раз "вещь" будет в порядке.

Ответы [ 4 ]

9 голосов
/ 08 декабря 2009

Используя метод UITextFieldDelegate, упомянутый intregus, вы можете сделать это довольно легко:

- (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];
}
5 голосов
/ 08 декабря 2009

Вы можете попробовать использовать следующий метод UITextFieldDelegate:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
1 голос
/ 19 ноября 2010

попробуйте использовать UIKeyboardTypeNamePhonePad для UITextField. На нем только буквы и цифры:

textField.keyboardType = UIKeyboardTypeNamePhonePad;
0 голосов
/ 16 сентября 2010

Используя 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;
    }

}
...