我使用UISplitViewController创建了一个ipad应用程序,它在两个方向都起作用。现在我想为此应用程序添加横幅。我该怎么做呢?在界面构建器中,我只能向detailView添加一个portait横幅,它可以或多或少地工作,但是当我转动iPad并单击横幅时,它会以纵向模式而不是横向模式打开。并且横幅永远不会达到ipad-landscape模式的规定宽度。
尝试以编程方式执行此操作,它告诉我adbannerview的父级应该是UIViewController。
答案 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。