Определение того, какой вид отображается в данный момент - PullRequest
0 голосов
/ 08 сентября 2010

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

Моя проблема в том, что у меня есть пользовательский drawMethod на панели навигации, однако, когда я загружаю видео на 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, кажется, не слишком точно это делают)

1 Ответ

2 голосов
/ 09 сентября 2010

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

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

В конце концов я сделал это.

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

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

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

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

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

...