iPad - часть экрана больше не получает сенсорные события после закрытия полноэкранного модального контроллера просмотра на iPad

У меня есть панель инструментов в верхней части (полноэкранного) основного представления на моем iPad. На панели инструментов есть barButtonItem, при нажатии которого отображается всплывающее окно.

Во всплывающем окне у меня есть UIButton, который при нажатии сообщает делегату (главному контроллеру представления) закрыть всплывающее окно и показать модальное представление полной страницы.

Все работает нормально.

Когда я закрываю модальное представление, область экрана, занимаемая всплывающим окном, включая основной вид и кнопки панели инструментов, больше не реагирует на события касания.

Эта проблема устраняется сама собой, если я поворачиваю устройство, и возникает только в ландшафтном режиме.

Какие-либо предложения?

Обновление: эта ошибка не возникает при работе в симуляторе, только на реальном iPad.

Метод делегата, который я должен отклонить в полноэкранном модальном режиме.

- (void)fullScreenViewControllerDidFinish:(FullScreenWebViewController *)fullScreenWebView {
    [self dismissViewControllerAnimated:YES completion:^{
        [self setFullScreenWVC:nil];
        [[self view] setNeedsLayout]; //Does't fix the issue
    }];
}

Обновление: Используя инструменты, я получил iPad, чтобы показать мне, как он выкладывает подвиды. Похоже, он думает, что iPad находится в портретной ориентации, когда модальный вид отключен, но устройство явно находится в альбомной ориентации.

введите описание изображения здесь


person W Dyson    schedule 29.05.2012    source источник


Ответы (2)


Я исправил проблему.

Я использовал

UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; 

вместо

UIDeviceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];

По какой-то причине iPad не мог правильно ориентироваться.

Спасибо за вашу помощь.

person W Dyson    schedule 01.06.2012

Возможно, я неправильно понимаю вашу проблему, но я бы посоветовал попытаться вызвать "setNeedsLayout" в вашем основном представлении после того, как модальное представление будет отклонено. Это должно вызвать автоматическое изменение размера макета вашего представления и может решить проблему, если размер не был изменен автоматически.

Взгляните на эту ссылку для получения дополнительной информации:

http://developer.apple.com/library/ios/ipad/#documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/instm/UIView/setNeedsLayout

person Kevin Horgan    schedule 31.05.2012
comment
Кевин, это не решило проблему. Я обновлю вопрос своим полноэкранным обратным вызовом делегата, отклоняющим VC. - person W Dyson; 01.06.2012
comment
Попробуйте затем вызвать setNeedsDisplay, чтобы перерисовать весь прямоугольник границ вместо моего предыдущего предложения setNeedsLayout. - person Kevin Horgan; 01.06.2012
comment
Это тоже не сработало. Я должен вызывать их на главном экране, верно? - person W Dyson; 01.06.2012