AdMob在我的所有视图控制器中?

时间:2012-04-10 16:08:31

标签: iphone xcode admob advertising banner

我已经实施了AdMob&一切似乎都有效,
但我想知道,我怎么能把横幅放在我的所有视角控制器中呢? 现在,我只在RootViewController上有横幅 我总共有4个视图控制器 感谢。

2 个答案:

答案 0 :(得分:5)

你想要的是GADBannerView单身的单身。您可以创建一个包装类来充当adView的单例,如下所示:

@interface GADMasterViewController : UIViewController {
  GADBannerView *adBanner_;
  BOOL didCloseWebsiteView_;
  BOOL isLoaded_;
  id currentDelegate_;
}

并确保GADMasterViewController始终返回单身:

+(GADMasterViewController *)singleton {
  static dispatch_once_t pred;
  static GADMasterViewController *shared;
  // Will only be run once, the first time this is called
  dispatch_once(&pred, ^{
    shared = [[GADMasterViewController alloc] init];
  });
  return shared;
}

有一个方法可以重置当前持有adView的视图控制器:

-(void)resetAdView:(UIViewController *)rootViewController {
  // Always keep track of currentDelegate for notification forwarding
  currentDelegate_ = rootViewController;

  // Ad already requested, simply add it into the view
  if (isLoaded_) {
    [rootViewController.view addSubview:adBanner_];
  } else {

    adBanner_.delegate = self;
    adBanner_.rootViewController = rootViewController;
    adBanner_.adUnitID = kSampleAdUnitID;

    GADRequest *request = [GADRequest request];
    [adBanner_ loadRequest:request];
    [rootViewController.view addSubview:adBanner_];
    isLoaded_ = YES;
  }
}

然后展示您的广告只需要:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    shared = [GADMasterViewController singleton];
    [shared resetAdView:self];
}

您可能还需要设置一个代理来转发通知,因为AdMob SDK不能很好地代表在请求过程中对其进行更改的代理。

您可以找到有关此here的博文。

答案 1 :(得分:1)

我不知道adMob是如何运作的,但是像其他一切你可以创建一个BaseViewController,你可以在其中添加你的adMob(在viewDidLoad方法中)然后所有其他的viewControllers都可以subClass这个BaseViewController。只需在viewControllers的[super viewDidLoad];方法中调用viewDidLoad,就可以了...

希望这能解决你的问题......:)