5

AdMob を実装しましたが、すべてが機能しているように見え
ますが、すべてのビュー コントローラーにバナーを配置するにはどうすればよいでしょうか?
今のところ、バナーは RootViewController にのみあります。
合計 4 つのビュー コントローラーがあります。
ありがとう。

4

2 に答える 2

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を保持している現在のViewControllerをリセットするメソッドがあります。

-(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は、リクエストの途中で変更されたデリゲートに対して適切に機能しないため、通知を転送するためのデリゲートも設定する必要があります。

これに関するブログ投稿はここにあります

于 2012-04-10T20:59:07.867 に答える
1

adMob がどのように機能するかはわかりませんが、他のすべてと同様BaseViewControllerに、(メソッド内で) adMob を追加できる を作成するviewDidLoadと、他のすべての viewControllers が this をサブクラス化できますBaseViewController。viewControllers[super viewDidLoad];のメソッドを呼び出すだけで、それが得られます...viewDidLoad

これで問題が解決することを願っています... :)

于 2012-04-10T16:20:48.540 に答える