當然,這是行得通的,但唯一的問題是,當您更新廣告委託時,它不會真正爲廣告選取新委託,除非您明確地製作新廣告廣告請求,因此您的舊視圖將會收到來自廣告的任何通知。我建議製作一個adMob單身人員的方法,然後將任何委託通知轉發到正確的視圖。
所以創建一個名爲GADMasterViewController
類(確保它遵循GADBannerViewDelegate
協議太)或一些東西,有一個靜態初始化像這樣:
+(GADMasterViewController *)singleton {
static dispatch_once_t pred;
static GADMasterViewController *shared = nil;
dispatch_once(&pred, ^{
shared = [[GADMasterViewController alloc] init];
});
return shared;
}
然後在初始化可以初始化一個單一的GADBannerView作爲屬性此單的:
-(id)init
{
if (self = [super init])
{
self.adBanner = [[GADBannerView alloc]
initWithFrame:CGRectMake(0.0,
0.0,
GAD_SIZE_320x50.width,
GAD_SIZE_320x50.height)];
// Has an ad request already been made
self.isLoaded = NO;
}
return self;
}
然後你就可以擁有這臺新的AdView作爲currentDelegate作爲這樣的方法:
-(void)resetAdView:(UIViewController<GADBannerViewDelegate> *)rootViewController {
if (self.isLoaded) {
currentDelegate_ = rootViewController;
[rootViewController.view addSubview:self.adBanner];
}
else {
// The delegate to forward any notifications too
currentDelegate_ = rootViewController;
self.adBanner.delegate = self;
self.adBanner.rootViewController = rootViewController;
self.adBanner.adUnitID = kSampleAdUnitID;
GADRequest *request = [GADRequest request];
[self.adBanner loadRequest:request];
[rootViewController.view addSubview:self.adBanner];
self.isLoaded = YES;
}
}
在這一點上,你只想着你獲得正確的viewController任何通知,所以一個例子是:
- (void)adViewDidReceiveAd:(GADBannerView *)view {
if ([currentDelegate_ respondsToSelector:@selector(adViewDidReceiveAd:)]) {
[currentDelegate_ adViewDidReceiveAd:view];
}
}
在ViewControllerX
(一個你4個ViewControllers的),你可以只將其添加到您的視圖層次使用:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
shared = [GADMasterViewController singleton];
[shared resetAdView:self];
}
您不能將一個視圖作爲子視圖添加到多個視圖。 – beryllium 2012-03-14 10:11:12