Подтвердить что ты не робот

Устранение неисправностей: 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];
}

Это обходное решение работает, но должен быть лучший способ. Пожалуйста, просветите меня о том, что я делаю неправильно!:) И как подойти к таким проблемам, не имея возможности сами его дублировать?

4b9b3361

Ответ 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];
}