将ADBannerView放在UINavigationController之上

时间:2011-04-11 20:56:21

标签: objective-c cocoa-touch ios4 uinavigationcontroller iad

我正在尝试在基于UINavigationController的应用程序中放置iAd横幅(它不是xcode提出的标准导航基础应用程序,因为我不需要表视图)。 无论用户如何弹出和推送视图,我都希望在其底部放置一个ADBanner,以便始终可见。

我在苹果示例代码中研究了iAdSuite示例,但是,虽然它是在“最佳实践”中报告的,但我认为这不是我需要的最佳实践。它基本上在app delegate类中声明了一个ADBannerView,然后为应用程序所需的每个视图实现ADBannerViewDelegate方法。这意味着在您需要的每个视图控制器类上反复实现ADBannerViewDelegate方法!它似乎不太聪明...... :(

我宁愿选择一种更类似于Apple自己在基于标签栏的应用程序中的方法,其中窗口的一部分总是被标签控制器占用,所有视图在上面切换而不影响标签酒吧视图如下。 您无法在应用程序委托中直接放置ADBannerView和导航控制器,因为ADBanner需要放在视图控制器中(否则会出现运行时错误)。

我尝试从UIViewController继承子类,在这个类中实现ADBannerViewDelegate,并将它与UINavigationController一起放在rootViewController中,但我对这种方法没有好运......

有没有人找到一个好的,简单的方法来做到这一点?任何提示?

感谢您的帮助......

1 个答案:

答案 0 :(得分:2)

ADBannerViewDelegate只能有一个班级,而ADBanner本身只有一个班级。当前活动视图更改时,从旧视图中删除ADBanner,将其作为子视图添加到新视图。

编辑:

澄清一下,您不需要每个视图都实现ADBannerViewDelegate。您只应该有一个类来实现它(该类不必是视图控制器)。

您还需要维护一个指向当前活动视图的属性(例如,您可以在导航控制器的navigationController:didShowViewController:animated:中更新该属性,或者如果您的视图提出自己的协议以更复杂的方式出现。)

然后在ADBannerViewDelegate中,您只需调整当前视图属性当前指向的视图的大小。实际观点甚至不必知道它中有广告;)