0

我有个问题。我正在使用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 似乎不太准确)

4

1 回答 1

2

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

我意识到导航栏是在推送加载的 viewController 之后绘制的。此外,modalViewController 位于 navigationController 的“堆栈”中 topViewController 的顶部,并且在 modalViewController 被解除时不需要它们重新绘制导航栏......

最后我做到了。

在我的 navBar 绘制方法中,在它检查了 BOOL 并正确绘制之后,我进行了检查。

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

这意味着一旦我的 videoController(带有 youtube webview/button 的那个)加载,BOOL 就会改变。因此,当我无法使用的新 modalViewController 被加载时,它会绘制默认导航栏,而不是我的自定义图像。

剩下要做的就是为 videoController 覆盖我的导航栏控制器上的后退按钮操作并设置kDrawNavBar = TRUE;以便在退出此视图并返回我的“主屏幕”时,一切都恢复正常。

希望这将有助于将来的其他人。

于 2010-09-09T14:02:55.147 回答