Claro, eso funcionaría pero el único problema es que cuando actualiza el delegado para el anuncio, no recogerá al nuevo delegado para el anuncio a menos que haga un nuevo solicitud de anuncio, por lo que sus vistas anteriores recibirán notificaciones del anuncio. Recomiendo el enfoque de hacer un singleton de AdMob que luego envíe las notificaciones de delegados a la vista correcta.
lo tanto la creación de una clase llamada GADMasterViewController
(asegúrese de que sigue el protocolo GADBannerViewDelegate
también) o algo que tiene un inicializador estático como tan:
+(GADMasterViewController *)singleton {
static dispatch_once_t pred;
static GADMasterViewController *shared = nil;
dispatch_once(&pred, ^{
shared = [[GADMasterViewController alloc] init];
});
return shared;
}
Luego, en el inicializador puede inicializar una sola GADBannerView como una propiedad de este producto único:
-(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;
}
, entonces puede tener un procedimiento que establecerá la nueva adView como el currentDelegate como tal:
-(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;
}
}
En este punto, lo que desea reenviar las comunicaciones que se llega a la viewController derecha, por lo que un ejemplo sería:
- (void)adViewDidReceiveAd:(GADBannerView *)view {
if ([currentDelegate_ respondsToSelector:@selector(adViewDidReceiveAd:)]) {
[currentDelegate_ adViewDidReceiveAd:view];
}
}
En ViewControllerX
(uno de sus 4 ViewControllers), que sólo podría agréguelo a su jerarquía de vistas utilizando:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
shared = [GADMasterViewController singleton];
[shared resetAdView:self];
}
No puede agregar una vista como subvista a varias vistas. – beryllium