UIKдля включения ключа Caps Lock - PullRequest
1 голос
/ 25 апреля 2010

Мне нужно, чтобы мой пользователь ввел некоторые данные, такие как DF-DJSL, поэтому я ввел это в код:

theTextField.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters;

Но, к сожалению, происходит то, что в CAPS сначала вводится буква, а затем буква сразу после ввода дефиса будет в нижнем регистре, а затем все остальные возвращаются в CAPS, что приводит к выводу, подобному этому (если пользователь не нажимает кнопку переключения после ввод дефиса): DF-dJSL

Как я могу это исправить?

Большое спасибо

1 Ответ

6 голосов
/ 04 сентября 2010

Вы не упоминаете, какой SDK вы используете, но для версии 3.0 и выше я вижу желаемое поведение.

Тем не менее, вы всегда можете изменить текст в верхний регистр, когда они завершат редактирование, используя textFieldDidEndEditing из делегата:

- (void)textFieldDidEndEditing:(UITextField *)textField {
    NSString *textToUpper = [textField.text uppercaseString];   
    [theTextField setText:textToUpper];
}

Или, настроив уведомление в текстовом поле при его изменении, вы можете изменить текст по мере его ввода:

// setup the UITextField
{
    theTextField.delegate = self;
    theTextField.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters;
    [theTextField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
}

Вы должны сделать это таким образом, поскольку, в отличие от UISearchBar , UITextField не реализует textDidChange . Может быть, как-то так?

- (void)textFieldDidChange:(UITextField *)textField {
    NSRange range = [textField.text rangeOfString : @"-"];
    if (range.location != NSNotFound) {
        theTextField.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...