Несомненно, это сработает, но единственная проблема в том, что при обновлении делегата для объявления он фактически не возьмет нового делегата для объявления, если вы явно не сделаете новый запрос объявления, поэтому ваши старые представления будут получать уведомления из объявления. Я бы рекомендовал использовать 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];
}
Вы не можете добавить один вид в виде подсмотра для нескольких видов. – beryllium