Устранение неполадок стать первым респондентом не показывает клавиатуру для некоторых пользователей - PullRequest
14 голосов
/ 12 декабря 2011

Я получил 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];
}

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

Ответы [ 4 ]

26 голосов
/ 02 августа 2012

Я позвонил becomeFirstResponder позже по этой строке:

[self.searchBar performSelector:@selector(becomeFirstResponder) 
                     withObject:nil 
                     afterDelay:0.1f];

Это сработало для меня. Надеюсь, что это поможет.

9 голосов
/ 16 мая 2013

Текстовое представление еще не закончено, когда вы пытаетесь сделать его первым респондентом.

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

[UIView animateWithDuration:0.0 animations:^{
   [view addSubview:textView];
} completion:^(BOOL finished){
   [textView becomeFirstResponder];
}];
4 голосов
/ 28 сентября 2014

Начиная с iOS8, вызов метода createFirstResponder для UITextView не отображает клавиатуру для меня на симуляторе iOS, а на реальном устройстве.Так что не забудьте проверить это с реальным устройством.Это не происходит на iOS7, хотя.

0 голосов
/ 12 декабря 2011

Попробуйте посмотреть, сможете ли вы сначала показать клавиатуру:

if([inputTextField canBecomeFirstResponder]){
    [inputTextField becomeFirstResponder];
}
...