Определение того, какой вид отображается в данный момент

У меня проблема. Я использую three20 и использую TTYoutubeView, я думаю, что эта проблема не обязательно требует знания three20.

Моя проблема в том, что у меня есть собственный метод рисования на моей панели навигации, однако, когда я загружаю видео с YouTube, мне нужно указать ему игнорировать мой собственный метод рисования (это не проблема, у меня есть глобальный BOOL, который может это сделать ).

Моя проблема в том, что я никак не могу определить, когда загружается видео на YouTube, оно запускается через объект в UIWebview, поэтому UITouches не может быть пойман, и я не хочу создавать подклассы UIWebview, как после того, как видео на YouTube было уволен, у меня тоже нет возможности это поймать.

Что мне нужно, так это метод, который всякий раз, когда моя навигационная панель рисуется, спрашивает: «Какой класс является текущим viewController», тогда я могу сказать, что рисовать в зависимости от того, что отображается.

NSLog(@"%@",[TTNavigator navigator].topViewController);
NSLog(@"%@",[TTNavigator navigator].visibleViewController);

Я выхожу из viewControllers в моем методе рисования, это работает отлично, мой код регистрируется следующим образом

2010-09-08 16:39:23.171 MyApp[3512:307] <HomeController: 0x264df0>
2010-09-08 16:39:23.174 MyApp[3512:307] <HomeController: 0x264df0>

Проблема в том, что когда загружается видео на YouTube, кажется, загружается modalViewController, мой код по-прежнему выводит из системы viewController, который находится под этим modalController. Он не говорит мне, что находится сверху.

Обнаружение viewController показалось мне яркой искрой, когда я подумал об этом, и, насколько я понимаю, это все еще хорошая идея. Я просто в недоумении, как я могу узнать, какой вид в настоящее время находится сверху. (поскольку topViewController и visibleViewController, похоже, не делают это точно)


person Bongeh    schedule 08.09.2010    source источник
comment
я только что попробовал NSLog(@"%@",[[TTNavigator navigator].topViewController popupViewController]); к сожалению, это дает мне только NULL   -  person Bongeh    schedule 08.09.2010


Ответы (1)


после долгих поисков я обнаружил, что просто не могу получить какой-либо обратный вызов от объекта youtube или веб-просмотра относительно происходящих внутри него событий без обширного подкласса.

Я понял, что navBar рисуется ПОСЛЕ того, как загружается viewController. Кроме того, эти modalViewController сидят поверх topViewController в «стеке» в navigationController и не требуют, чтобы их navBar перерисовывался при отклонении modalViewController...

В итоге я сделал это.

В моем методе рисования navBar ПОСЛЕ того, как он проверил BOOL и правильно отрисовал, я делаю проверку.

if ([[TTNavigator navigator].topViewController isKindOfClass:[VideoController class]]) {
    kDrawNavBar = FALSE;
}

Это означает, что как только мой видеоконтроллер (тот, в котором есть веб-просмотр/кнопка youtube) загружается, BOOL изменяется. Так что, когда загружается новый modalViewController, который не в моих руках, он рисует navBar по умолчанию, а не мое собственное изображение.

Все, что осталось сделать, это переопределить действие кнопки «Назад» на моем контроллере navBar для видеоконтроллера и установить kDrawNavBar = TRUE;, чтобы после выхода из этого представления и возврата к моему «домашнему экрану» все вернулось в норму.

Надеюсь, это поможет кому-то еще в будущем.

person Bongeh    schedule 09.09.2010