Это своего рода продолжение этой проблемы: becomeFirstResponder замедляет работу приложения
У меня та же проблема, что и у этого плаката, т. е. вызов beFirstResponder, похоже, замедляет работу моего приложения (оно зависает, может быть, на 1-2 секунды). Однако, хотя они вызывали его в сочетании с отображением предупреждения, я просто пытаюсь отобразить скрытое представление и сделать так, чтобы оно отображалось с определенным полем в качестве первого ответчика. Что-то типа:
[self.dialogView setHidden:NO];
[self.dialogText becomeFirstResponder];
DialogView имеет иерархию, которая содержит dialogText (UITextField, который я пытаюсь установить в качестве первого ответчика) и некоторые другие элементы.
Эта медлительность проявляется только при первом выполнении этого кода, то есть при первой попытке открыть это диалоговое окно. При последующих попытках нет очевидной медлительности (я предполагаю, что это связано с тем, что в этот момент dialogText уже является первым ответчиком - я нигде не использовал resignFirstResponder?).
Изменить: вот дополнительный код для контекста, но не уверен, что он действительно прольет больше света. Примечание. Теперь я анимирую отображение этого диалогового окна, однако поведение не отличается. С тех пор я также переместил вызов beFirstResponder в блок завершения (не отраженный здесь в коде), чтобы, по крайней мере, появление диалогового окна не задерживалось, однако между появлением диалогового окна и появлением клавиатуры все еще есть задержка.
- (IBAction)showEditDialog:(id)sender
{
[UIView animateWithDuration:0.3f animations:^() {
self.maskView.alpha = 0.8;
self.editDialogView.alpha = 1.0;
} completion:^(BOOL finished) {
if (finished) {
}
}];
[self.editDialogText becomeFirstResponder];
}