如何将adbannerview添加到UISplitviewController

时间:2011-01-19 11:17:14

标签: ipad uisplitviewcontroller

我使用UISplitViewController创建了一个ipad应用程序,它在两个方向都起作用。现在我想为此应用程序添加横幅。我该怎么做呢?在界面构建器中,我只能向detailView添加一个portait横幅,它可以或多或少地工作,但是当我转动iPad并单击横幅时,它会以纵向模式而不是横向模式打开。并且横幅永远不会达到ipad-landscape模式的规定宽度。

尝试以编程方式执行此操作,它告诉我adbannerview的父级应该是UIViewController。

4 个答案:

答案 0 :(得分:2)

iAdSuite Apple示例代码中,有一个拆分视图控制器iAd实现,您可以轻松地将其添加到您的应用程序中。 :^)

答案 1 :(得分:2)

同样的问题让我疯了很久,直到找到iAdSuite样本。因此,要扩展Erran的答案:使用Apple的iAdSuite示例代码。

使用故事板为自己创建一个有效的拆分视图应用。

包含iAd框架。

将BannerViewController.h和.m文件复制到您的应用程序。然后在AppDelegate.m中的“application didFinishLaunching”中复制iAdSuite的AppDelegate中的行,按照最后一行:

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
{
    UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
    UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
    splitViewController.delegate = (id)navigationController.topViewController;
    UINavigationController *masterNavigationController = splitViewController.viewControllers[0];

    _bannerViewController = [[BannerViewController alloc] initWithContentViewController:splitViewController];

在iPhone部分中,您需要以下这一行:

_bannerViewController = [[BannerViewController alloc] initWithContentViewController:navigationController];

在return语句之前添加此

self.window.rootViewController = _bannerViewController;

在.m

的顶部添加此项
@implementation AppDelegate{
BannerViewController *_bannerViewController;}

#import "BannerViewController.h"

或者以您喜欢的方式创建bannerViewController属性。

将.h修改如下:

#import <UIKit/UIKit.h> 
@class BannerViewController;
@interface AppDelegate : UIResponder <UIApplicationDelegate>

这足以让它全部运转起来。整个拆分视图应用程序现在在BannerView内部运行。它处理所有AdBannerDelegate函数。

祝你好运: - )

答案 2 :(得分:1)

我已经采取了@ ipwnstuff的答案了。

首先警告:iAd只允许您以“纵向”或“横向”显示,而在iPad上,这分别表示768x66或1024x66。这意味着不可能将ADBannerView仅限制在UISplitViewController详细视图中,除非您想要自己滚动视图稍微宽一点(因此稍微窄一点的masterViewController视图。我想坚持使用故事板,所以我不想走这条路。

第二个警告,@ ipwnstuff指出的iAdSuite内容并不是立即故事板友好的。它以编程方式创建UISplitViewController,您必须通过.XIB或以编程方式提供主服务器和详细信息。因为我有一个工作故事板,我想集成iAds,我想扩展它。此外,iAdSuite解决方案不会在纵向模式下隐藏主视图,我仍然想要它。

所以...启动现有的iPad.storyboard文件,然后使用iAdSuite与SplitBanner示例集成,如下所示:

    UISplitViewController *splitViewController = (id)self.window.rootViewController;
    splitViewController.delegate = (id)splitViewController.detailUIViewController;
    CGRect splitViewFrame = splitViewController.view.frame;
        splitViewFrame.origin.y -= application.statusBarFrame.size.height;
        splitViewFrame.size.height += application.statusBarFrame.size.height;
    splitViewController.view.frame = splitViewFrame;

    // initWithContentViewController: the thing that's in the iAdSuite SplitViewBanner example
    self.bannerViewController
      = [[BannerViewController alloc] initWithContentViewController:splitViewController];
    self.window.rootViewController = self.bannerViewController;
因此,我可以使用故事板UISplitViewController作为iAdSuite提供的BannerViewController的childViewController。

好的,第三个警告:有一个小问题,那就是如果你通过splitViewControllerDelegate设置了正常的条形按钮设置,如果你在广告期间轮换,代理将不会被调用,因此该按钮将暂时显示当它不应该或不应该出现的时候。

答案 3 :(得分:0)

起初看起来有点像你忘记取消注释或实现了shouldAutorotateToInterfaceOrientation变量......但我不太确定。点击横幅时会发生什么?它是否会打开一个新的View和一个UIWebView?或者是其他东西?当我们现在谈论AD横幅时,您应该考虑实施Apples iAd Service。