Ipad 如何将adbannerview添加到UISPlitView控制器

Ipad 如何将adbannerview添加到UISPlitView控制器,ipad,uisplitviewcontroller,Ipad,Uisplitviewcontroller,我已经使用UISplitViewController制作了一个ipad应用程序,它可以在两个方向上运行。现在我想添加横幅到这个应用程序。我该怎么做?在interface builder中,我只能在detailView中添加一个portait横幅,它或多或少都能正常工作,但当我打开iPad并单击横幅时,它会以纵向模式而不是横向模式打开。横幅永远无法达到ipad横向模式的规定宽度 尝试以编程方式执行此操作时,它告诉我adbannerview的父级应该是UIViewController。起初,看起来有

我已经使用UISplitViewController制作了一个ipad应用程序,它可以在两个方向上运行。现在我想添加横幅到这个应用程序。我该怎么做?在interface builder中,我只能在detailView中添加一个portait横幅,它或多或少都能正常工作,但当我打开iPad并单击横幅时,它会以纵向模式而不是横向模式打开。横幅永远无法达到ipad横向模式的规定宽度


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

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

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

我对@ipwnstuff的回答有了进一步的理解

第一个警告:iAd仅允许您以纵向或横向显示,而在iPad上,这意味着分别为768x66或1024x66。这意味着不可能仅将ADBannerView限制为UISPlitView控制器详细视图,除非您希望滚动自己的视图,该视图具有略宽的视图,从而略窄的masterViewController视图。我想坚持故事板,所以我不想走这条路

第二个警告是,@ipwnstuff指向的内容不是立即对故事板友好的。它以编程方式创建UISplitViewController,您必须通过.XIB或编程方式提供主控和详细信息。因为我有一个可以工作的故事板,我想将IAD集成到其中,所以我想扩展它。此外,iAdSuite解决方案不会在纵向模式下隐藏主视图,我仍然希望这样

因此…启动现有的iPad.storyboard文件,然后与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;
#import <UIKit/UIKit.h> 
@class BannerViewController;
@interface AppDelegate : UIResponder <UIApplicationDelegate>
因此,我能够使用故事板UISplitViewController作为由提供的BannerViewController的childViewController


好的,第三个警告:有一个小问题,那就是如果您通过splitViewControllerDelegate设置了正常的条形按钮设置,那么如果您在广告期间旋转,代理将不会被调用,因此,按钮将在不应该显示时临时显示,或者在应该显示时不显示。

同样的问题让我疯狂了好长时间,直到我找到iAdSuite示例。因此,要扩展Erra的答案:使用苹果公司的iAdSuite示例代码

使用故事板为自己制作一个可工作的分割视图应用程序

包括iAd框架

将BannerViewController.h和.m文件复制到应用程序中。然后在application 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修正如下:

    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;
#import <UIKit/UIKit.h> 
@class BannerViewController;
@interface AppDelegate : UIResponder <UIApplicationDelegate>
这足以让一切顺利进行。整个分割视图应用程序现在在BannerView中运行。处理所有AdBannerDelegate函数的


祝你好运:-

是的,在这种情况下我们谈论的是网络成瘾。我确实实现了shouldAutorotateToInterfaceOrientation。主要问题是,横向视图中占据整个屏幕的唯一视图是splitview,您不能将横幅添加到该视图中。横幅打开了一个新的视图,我认为它是一个UIBannerView,至少是一个你通常无法访问的类。我想在splitViewController中显示iAd,就像苹果的iAdSuite中一样。但我用的是故事板。您的解释缺少将splitviewcontroller中的iAd与横向模式的情节提要集成的方法。你能帮我做这个吗?