【问题标题】:how to add an adbannerview to a UISplitviewController如何将 adbannerview 添加到 UISplitviewController
【发布时间】:2014-11-10 00:49:06
【问题描述】:

我使用 UISplitViewController 制作了一个 ipad 应用程序,它可以在两个方向上运行。现在我想向这个应用程序添加横幅。我该怎么做呢?在界面生成器中,我只能向 detailView 添加一个肖像横幅,它或多或少可以工作,但是当我转动 iPad 并单击横幅时,它会以纵向模式而不是横向模式打开。而且横幅永远无法达到 ipad-landscape 模式的规定宽度。

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

【问题讨论】:

    标签: ipad uisplitviewcontroller


    【解决方案1】:

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

    使用情节提要让自己成为一个可以工作的拆分视图应用程序。

    包括 iAd 框架。

    将 BannerViewController.h 和 .m 文件复制到您的应用中。然后在“应用程序 didFinishLaunching”中的 AppDelegate.m 中,按照此处的最后一行从 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】:

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

      【讨论】:

        【解决方案3】:

        我对@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 设置了正常的条形按钮设置,如果您在广告期间旋转,代理将不会被调用,因此按钮将暂时显示在不应该出现的时候出现,或者在应该出现的时候不出现。

        【讨论】:

        • 我想在 splitViewController 中显示 iAd,就像在苹果的 iAdSuite 中一样。但我正在使用故事板。您的解释缺少将 iAd 在 splitviewcontroller 中与横向模式的情节提要集成的方式。你能帮我解决这个问题吗?
        【解决方案4】:

        起初它看起来有点像您忘记取消注释或实现 shouldAutorotateToInterfaceOrientation 变量...但我不太确定。当您点击横幅时会发生什么?它会打开一个新视图和一个 UIWebView 还是什么?或者是其他东西?当我们现在谈论广告横幅时,您可能应该考虑实施 Apple 的 iAd 服务。

        【讨论】:

        • 是的,在这种情况下,我们正在谈论 iAd。我确实实现了 shouldAutorotateToInterfaceOrientation。主要问题是,占据整个屏幕的唯一横向视图是拆分视图,您不能在此视图中添加横幅。横幅打开了一个新视图(我认为它是一个 UIBannerView,至少是一个你通常无法访问的类)。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多