Конечно, это будет работать, но единственная проблема заключается в том, что когда вы обновляете делегата для объявления, он фактически не подберет новый делегат для объявления, если вы явно не сделаете новый запрос объявления, поэтому ваши старые представления будут получать любые уведомления. из объявления. Я бы порекомендовал подход создания синглтона 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 ViewController) вы можете просто добавить его в свою иерархию представлений, используя:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
shared = [GADMasterViewController singleton];
[shared resetAdView:self];
}
person
RajPara
schedule
14.03.2012