Отображение клавиатуры в нужное время iOS7

В iOS 6 я использую для представления клавиатуры в viewDidLoad.

- (void)viewDidLoad
{
    [super viewDidLoad];

    [txtField becomeFirstResponder];
}

Таким образом, когда navigationController нажимает новый viewController, клавиатура уже существует, плавно анимируя слева направо и избегая восходящей анимации.

В iOS 7 это поведение кажется сломанным.

Если я добавлю [txtField becomeFirstResponder] в viewDidLoad, клавиатура появится в середине нажатия анимации, уже в ее конечной позиции: неприятный эффект!

Я попытался переместить [txtField becomeFirstResponder] в viewWillAppear, но окончательный результат не изменился.

Знаете ли вы способ вернуть поведение iOS 6, нажав новый контроллер viewController и клавиатуру вместе?

EDIT: использование таймера не работает ни... независимо от того, какая временная задержка задана, клавиатура отображается только в конце нажатия анимации.

До сих пор я лучше всего поставил [txtField becomeFirstResponder] в viewWillLayoutSubviews или viewDidLayoutSubviews. К сожалению, это работает при нажатии viewController, но не при возврате (клавиатура не появляется).

Ответ 1

Мне удалось экстраполировать ваше обходное решение в viewWillLayoutSubviews, чтобы заставить его работать.

- (void)viewWillLayoutSubviews {

    if (![self.textField1 isFirstResponder] && ![self.textField2 isFirstResponder] && ...) {
        [self.textField1 becomeFirstResponder];
    }
}

Это работает для меня как для нажатия на стек, так и после отклонения модального контроллера представления.