Chắc chắn, điều đó có hiệu quả nhưng vấn đề duy nhất là khi bạn cập nhật đại biểu cho quảng cáo, nó sẽ không thực sự nhận đại biểu mới cho quảng cáo trừ khi bạn thực hiện một cách mới yêu cầu quảng cáo, do đó, chế độ xem cũ của bạn sẽ nhận được bất kỳ thông báo nào từ quảng cáo. Tôi muốn giới thiệu phương pháp tạo một singleton adMob sau đó chuyển tiếp bất kỳ thông báo nào của đại biểu đến chế độ xem phù hợp.
Vì vậy, việc tạo ra một lớp được gọi là GADMasterViewController
(đảm bảo tuân thủ các GADBannerViewDelegate
giao thức quá) hoặc một cái gì đó trong đó có một initializer tĩnh như vậy:
+(GADMasterViewController *)singleton {
static dispatch_once_t pred;
static GADMasterViewController *shared = nil;
dispatch_once(&pred, ^{
shared = [[GADMasterViewController alloc] init];
});
return shared;
}
Sau đó, trong initializer bạn có thể khởi tạo một GADBannerView duy nhất như là một tài sản của singleton này:
-(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;
}
Sau đó, bạn có thể có một phương pháp mà đặt adview mới của bạn như là currentDelegate như vậy:
-(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;
}
}
Tại thời điểm này, bạn chỉ muốn chuyển tiếp bất kỳ thông báo mà bạn nhận được để các viewController đúng, vì vậy một ví dụ sẽ là:
- (void)adViewDidReceiveAd:(GADBannerView *)view {
if ([currentDelegate_ respondsToSelector:@selector(adViewDidReceiveAd:)]) {
[currentDelegate_ adViewDidReceiveAd:view];
}
}
Trong ViewControllerX
(một trong 4 ViewControllers của bạn), bạn có thể chỉ thêm nó vào phân cấp chế độ xem của bạn bằng cách sử dụng:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
shared = [GADMasterViewController singleton];
[shared resetAdView:self];
}
Bạn không thể thêm một chế độ xem làm chế độ xem phụ cho nhiều chế độ xem. – beryllium