检测当前正在显示的视图

时间:2010-09-08 15:51:08

标签: iphone uiviewcontroller uinavigationbar three20 modalviewcontroller

我有问题。我正在使用three20并且正在使用TTYoutubeView,这个问题并不一定需要知道three20来修复我认为。

我的问题是,我在导航栏上有自定义drawMethod,但是,当我加载YouTube视频时,我需要告诉它忽略我的自定义绘制方法(这不是问题,我有一个全局BOOL,可以做到这一点)。

我的问题是,我无法检测到youtube视频何时加载,它是通过UIWebview中的对象启动的,所以没有UITouches可以捕获,我不喜欢子类化UIWebview,就像在youtube之后视频已被解雇,我也无法抓住这个。

我需要的是一种方法,每当我的导航栏被绘制时询问'当前的viewController是什么类',然后我可以根据显示的内容告诉它要绘制什么。

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

我正在我的draw方法中注销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,我的代码仍然会注销这个modalController下面的viewController。它并没有告诉我最重要的是什么。

当我想到它时,检测到viewController似乎是一个明亮的火花,就我而言,它仍然是一个好主意。我只是不知道如何找出当前最顶层的视图。 (因为topViewController和visibleViewController似乎也不太准确)

1 个答案:

答案 0 :(得分:2)

经过大量的搜索,我发现我根本无法从youtube对象或webview中获得任何关于在其中进行的事情的回调,而没有广泛的子类化。

我意识到navBar是在推送加载的viewController之后绘制的。另外,modalViewController位于navigationController上'stack'中topViewController的ontop上,并且当modalViewController被解除时不要求他们重新绘制navBar ...

最后我做到了。

在我的navBar绘制方法中,在检查BOOL并进行适当绘制后,我会进行检查。

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

这意味着一旦我的videoController(带有youtube webview /按钮的那个)加载,BOOL就会改变。因此,当加载了我手中的新modalViewController时,它会绘制默认的navBar,而不是我的自定义图像。

剩下要做的就是覆盖我的navBar控制器上关于videoController的后退按钮动作,并设置kDrawNavBar = TRUE;这样一旦退出这个视图,然后回到我的'主屏幕',一切都回来了正常。

希望将来可以帮助其他人。