Как программно сбросить вид клавиатуры с «символов» на «алфавит» - PullRequest
1 голос
/ 19 июля 2011

У меня есть UITextView, и я слушаю событие UIButton для выполнения действий над текстом внутри этого textView:

- (IBAction)buttonClicked {
    NSString *text = myTextView.text;
    //Do some work with the text.
    myTextView.text = @""; //reset the textView.
}

Я не хочу, чтобы textView равнялся resignFirstResponder.Проблема, с которой я сталкиваюсь: когда последний введенный символ был символом, клавиатура застревает в этом представлении и не сбрасывается в алфавитное представление клавиатуры по умолчанию, как это происходит в приложении обмена сообщениями и других приложениях.Как мне выполнить программную перезагрузку клавиатуры этим методом?

Это может быть повторный вопрос для этого вопроса .Но ответ, похоже, не работает для меня.

Это принятый ответ:

[editingField setKeyboardType:UIKeyboardTypeNumberPad];
[editingField reloadInputViews];

И это последний комментарий:

ОКОчевидно, что объявление его как UITextView вместо UIResponder влияет на его поведение во время выполнения.Это буквально единственное изменение, которое я сделал, и оно работает сейчас.Спасибо.

Но я не могу понять, какое небольшое изменение заставило его работать, поскольку я все еще борюсь с проблемой.

Я уже пробовал resignFirstResponder и becomeFirstResponder, но в быстрой последовательности scrollableView позади не устанавливается в соответствии с событием keyboardWillShow.Я также попробовал [textView setKeyboardAppearance:UIKeyboardAppearanceDefault], но изменений по-прежнему нет.

Есть ли какой-либо метод API, который делает это (например, клавиатура сбрасывается при автоматическом нажатии «пробел»)?

Ответы [ 3 ]

2 голосов
/ 22 июля 2011

Взлом, который я использовал, заключался в использовании скрытого textField для перезагрузки inputView.

Код:

UITextField *hiddenTextField = [[UITextField alloc] init];
[superView addSubview:hiddenTextField];

[hiddenTextField becomeFirstResponder];
[hiddenTextField reloadInputViews];
[textView_ becomeFirstResponder];

[hiddenTextField removeFromSuperview];
[hiddenTextField release];
1 голос
/ 20 июля 2013

Я не использую временное текстовое поле.Я просто resignFirstResponder и сразу becomeFirstResponder в самом текстовом виде.Если два вызова выполняются сразу один за другим, анимация скольжения клавиатуры не происходит.

Таким образом, моя функция buttonClicked выглядела бы так:

- (IBAction)buttonClicked {
    NSString *text = myTextView.text;
    //Do some work with the text.
    myTextView.text = @""; //reset the textView.

    // Reset keyboard back to QWERTY side
    [myTextView resignFirstResponder];
    [myTextView becomeFirstResponder];
}

В качестве примечания, к сожалению, даже при отсутствии анимации появляются уведомления клавиатуры (например, UIKeyboardWillShowNotification, UIKeyboardWillHideNotificationи т. д.) все еще звонят.Я просто установил флаг перед I resignFirstResponder, чтобы уведомить мои обратные вызовы уведомлений о скрытии / показе клавиатуры, чтобы пропустить выполнение.И после того, как я becomeFirstResponder убрал этот флаг, чтобы, когда клавиатура действительно сдвинулась, обратные вызовы уведомлений могли выполняться правильно.

0 голосов
/ 11 июля 2013
self.textField.keyboardType = UIKeyboardTypeAlphabet;
[self.textField reloadInputViews];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...