Устранение неисправностей: startFirstResponder, не отображающий клавиатуру для некоторых пользователей
Я получил TextView
, который должен отображаться при нажатии кнопки, и позволяет пользователю вводить текст с клавиатуры.
- (IBAction) changeName {
changeNameBtn.hidden = YES;
backBtn.hidden = YES;
usernameLabel.hidden = NO;
inputTextField.hidden = NO;
[inputTextField becomeFirstResponder]; // to show keyboard
}
Это работает отлично для большинства из нас.
Но клавиатура не отображается для некоторых моих тестеров в географически удаленном месте. Как бороться с этим? И что может быть причиной различного поведения наших устройств? Он отлично работает для меня и для всех остальных. Мы все используем те же устройства (iPod, iOS 4.1 - 5.1).
Первое, что я пробовал, не помогло:
Я предположил, что inputTextField каким-то образом не стал видимым во времени, перед тем как becomeFirstResponder
был запущен, поэтому я добавил setNeedsDisplay
, поскольку я думал, что это заставит обновление.
[inputTextField setNeedsDisplay];
[inputTextField becomeFirstResponder];
Вторая вещь, которую я пробовал, не работает:
if([inputTextField canBecomeFirstResponder]){
[inputTextField becomeFirstResponder];
}
Третья вещь, которую я пробовал, - это обходной путь, требующий, чтобы неудачный пользователь нажал поле:
- (IBAction) inputTextFieldTouch {
[inputTextField becomeFirstResponder];
}
Это обходное решение работает, но должен быть лучший способ. Пожалуйста, просветите меня о том, что я делаю неправильно!:) И как подойти к таким проблемам, не имея возможности сами его дублировать?
Ответы
Ответ 1
Текстовое изображение еще не закончилось, пока вы пытаетесь сделать его первым ответчиком.
Вы можете попробовать оживить внешний вид и установить первого ответчика в блоке завершения.
[UIView animateWithDuration:0.0 animations:^{
[view addSubview:textView];
} completion:^(BOOL finished){
[textView becomeFirstResponder];
}];
Ответ 2
Я назвал becomeFirstResponder
позже этой строкой:
[self.searchBar performSelector:@selector(becomeFirstResponder)
withObject:nil
afterDelay:0.1f];
Это сработало для меня. Надеюсь на эту помощь.
Ответ 3
Как и в iOS8, вызов beFirstResponder в UITextView не отображает клавиатуру для меня на симуляторе iOS, но он работает на реальном устройстве. Поэтому обязательно проверьте его на самом устройстве. Однако это не происходит на iOS7.
Ответ 4
Попробуйте посмотреть, можно ли сначала отобразить клавиатуру:
if([inputTextField canBecomeFirstResponder]){
[inputTextField becomeFirstResponder];
}