iPhone应用程序中的全局ADBannerView

时间:2010-09-08 15:22:56

标签: iphone uinavigationcontroller iad

使用标准的UINavigationController根应用程​​序,是否可以在视图层次结构下方的屏幕底部显示单个ADBannerView?也就是说,如果不修改可以推送到根UINavigationController的每个视图控制器/视图,我可以看到全局ADBannerView吗?

我不知道如何在IB或代码中设置它。帮助

我用模糊的答案看到了类似的问题。我正在寻找一个具体的例子。

4 个答案:

答案 0 :(得分:10)

编辑:在iOS5 +中更好的方法是使用视图控制器包含。也就是说,制作一个包含广告和应用程序控制器的根控制器(导航,标签等)。

我找到了一种方法来做到这一点。这是我做的:

在我第一次尝试时,我创建了一个名为AdBannerController的新视图控制器。为了它的视图,我创建了一个全屏视图和两个子视图。第一个子视图(contentView)用于常规内容,第二个是AdBannerView。我使用此视图控制器的实例作为与应用程序窗口关联的视图控制器([window addSubview:adBannerController.view])。然后我将我的UINavigationController.view添加为adBannerController.view的子视图:[adBannerController.contentView addSubview:navigationController.view]。

除了推送到UINavigationController的viewcontrollers永远不会调用它们的will / did-load / unload方法之外,这几乎起作用了。哪里哪里。我在一些地方读到,这是UINavigationController视图不是应用程序窗口的直接后代的症状。

对于我的第二次尝试,我使用了相同的AdBannerController,并从UINavigationController派生出来。这次,我在loadView中执行了以下操作:

- (void)loadView
{
    [super loadView];

    _contentView = [self.view retain];

    self.view = [[[UIView alloc] initWithFrame: _contentView.frame] autorelease];

    [self.view addSubview: _contentView];

    _adView = [[ADBannerView alloc] initWithFrame: CGRectMake(0, _contentView.bounds.size.height, 320, 50)];
    _adView.currentContentSizeIdentifier = ADBannerContentSizeIdentifier320x50;
    _adView.delegate = self;

    [self.view addSubview: _adView]; 

    /* for visual debugging of view layout
    [[_mainView layer] setCornerRadius: 6.0];
    [[_mainView layer] setMasksToBounds: YES];
    [[_mainView layer] setBorderWidth: 1.5];
    [[_mainView layer] setBorderColor: [[UIColor grayColor] CGColor]];  
     */
}

请注意发生了什么 - 我让超类UINavigationController构建其常规的“内容”视图,但我将其交换出来并将其替换为我自己的视图,该视图是内容和广告视图的容器。

这非常有效。我也使用了three20,并且需要一些东西来完成这个设置,但也不是太糟糕。

我希望这有助于某人!

答案 1 :(得分:3)

在Apple的开发示例代码中,iAdSuite项目内容项目已经为您完成了这项工作。强烈推荐。

答案 2 :(得分:2)

在我的根视图控制器(带有ADBannerViewDelegate)中,我通过将其添加到导航控制器视图来设置我的横幅,这使其始终保持在顶部:

banner = [[ADBannerView alloc] init];
banner.delegate = self;
banner.frame = CGRectMake(0.0, 430.0, banner.frame.size.width, banner.frame.size.height);
[self.navigationController.view addSubview:banner];

请注意,您必须在委托方法bannerViewDidLoadAd中注释掉layoutAnimated,因为它会尝试移动广告视图:

- (void)bannerViewDidLoadAd:(ADBannerView *)banner
{
    //[self layoutAnimated:YES];
}

答案 3 :(得分:0)

我采用了此处给出的iAdSuite中建议的方法

http://developer.apple.com/library/ios/#samplecode/iAdSuite/Introduction/Intro.html

我下载了代码并专注于“标签”示例。我将BannerViewController.h / .m原样复制到我的项目中。

我使用故事板方法以通常的方式创建了我的所有视图。但是,在我的AppDelegate类中,我访问了已构建的选项卡栏 - 包含所有storyboard内置的viewControllers。

AppDelegate类实现了TabBarControllerDelegate协议:

@interfaceAppDelegate : UIResponder <UITabBarControllerDelegate, UIApplicationDelegate>

AppDelegate实现didFinishLaunchingWithOptions方法抓取预先构建的tabBar,将其委托设置为self(例如AppDelegate类)。

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
// ----------------------------------------------------------
// Set the TabBarController delegate to be 'self'
// ----------------------------------------------------------
_tabBarController = (UITabBarController*)self.window.rootViewController;

//  tabController.selectedIndex = [defaults integerForKey:kOptionLastTabSelectedKey];
_tabBarController.delegate = self;

// update tab bar per iAdSuite approach
[self updateiAd];

然后,我根据iAdSuite方法构建了一组新的控制器,并使用这些新的标签栏项重置标签栏。

-(void)updateiAd {
NSArray* viewControllers = [_tabBarController viewControllers];
NSMutableArray*newViewControllers = [[NSMutableArray alloc] init];
BannerViewController*bvc=NULL;
for(UIViewController * vc in viewControllers) {
    bvc = [[BannerViewController alloc] initWithContentViewController:vc];
    [newViewControllers addObject:bvc];
}

// set the new view controllers, replacing the original set
[_tabBarController setViewControllers:newViewControllers];
}

此方法根据需要在每个视图的底部放置相同的“广告”。我还必须在每个自定义viewController的viewDidLoad方法中设置视图标题(不知何故,在条形项上设置它似乎没有工作没有设置图像;后面可能反映我的图像的问题)。 / p>

我原来的配置是

                           TabViewController

NavController1               NavController2          NavController3  ...
      |                            |                       |
CustomViewController1      CustomViewController2      CustomViewController3

我的最终配置现在是

                           TabViewController

NavController1               NavController2          NavController3  ...
     |                            |                       |
iAdView1                         iAdView2               iAdView3
    |                            |                       |
CustomViewController1      CustomViewController2      CustomViewController3

就视图生命周期而言,我应该补充一点,调用updateiAd方法时只存在NavControllers。

调用完成后会创建单独的CustomViewControllers1 / 2/3 / etc。