Разбира се, това би проработило, но единственият проблем е, че когато актуализирате делегата за рекламата, той всъщност няма да вземе новия делегат за рекламата, освен ако изрично не направите нова заявка за реклама, така че старите ви изгледи ще получават всякакви известия от рекламата. Бих препоръчал подхода за създаване на adMob singleton, който след това препраща всички известия за делегат към правилния изглед.
Така че създавате клас, наречен 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];
}
person
RajPara
schedule
14.03.2012