我有一个带有多个UITableViews的应用程序,我正在实现iADs.根据Apple文档(
http://developer.apple.com/library/ios/#technotes/tn2286/_index.html#//apple_ref/doc/uid/DTS40011212),我创建了一个属于我的应用程序委托的共享横幅,应用程序委托也是横幅的委托.这种方法效果很好,广告在加载横幅和用户切换屏幕后很好地显示在各种视图控制器上.
问题是在第一个viewController上没有看到广告,因为视图控制器的viweWillAppear方法(我称之为“fixUpAdView”方法)在加载横幅之前出现.
我想我得到的部分是这个(来自苹果文档):
“让您的应用程序委托告诉当前视图控制器是否应该显示或隐藏横幅.您可以使用UINavigationControllerDelegate或UITabBarControllerDelegate协议来推送横幅以显示它.”我知道我需要在bannerViewDidLoadAd和failToReceive方法中添加一些东西,但是对于如何执行此操作我有点困惑.
我不希望广告在我的所有视图控制器上显示(只有6个),并且我在应用程序中也有几个模态视图(其中任何一个都没有广告).
这是我的一些代码:
在我的appDelegate中:
- (void)bannerViewDidLoadAd:(ADBannerView *)banner { NSLog(@"bannerViewDidLoadAD"); if (!_adBannerViewIsVisible) _adBannerViewIsVisible = YES; } - (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error { NSLog(@"BannerAd didfailtoreceive"); if (_adBannerViewIsVisible) _adBannerViewIsVisible = NO; } - (ADBannerView *)sharedAdBannerView { if (_sharedAdBannerView == nil) { Class classAdBannerView = NSClassFromString(@"ADBannerView"); if (classAdBannerView != nil) { _sharedAdBannerView = [[classAdBannerView alloc] initWithFrame:CGRectZero]; [_sharedAdBannerView setrequiredContentSizeIdentifiers:[NSSet setWithObjects: ADBannerContentSizeIdentifier320x50,ADBannerContentSizeIdentifier480x32,nil]]; [_sharedAdBannerView setCurrentContentSizeIdentifier:ADBannerContentSizeIdentifier320x50]; [_sharedAdBannerView setFrame:CGRectOffset([_sharedAdBannerView frame],-(iAD_BANNER_HEIGHT))]; [_sharedAdBannerView setDelegate:self]; } } return _sharedAdBannerView; }
在我的视图控制器中:
- (void)viewWillAppear:(BOOL)animated { if ([[AppDelegate ad] shouldShowAds]) { if (!self.contentView) { self.contentView = [[UIView alloc] initWithFrame:[[self view] bounds]]; [self.view addSubview:_contentView]; } [self.contentView addSubview:topView]; [self fixupAdView]; [self.view addSubview:[[AppDelegate ad] sharedAdBannerView]]; } [super viewWillAppear:NO]; } #pragma mark #pragma mark iADS - (void)fixupAdView { if ([[AppDelegate ad] sharedAdBannerView] != nil) { [[[AppDelegate ad] sharedAdBannerView] setCurrentContentSizeIdentifier:ADBannerContentSizeIdentifier320x50]; [UIView beginAnimations:@"fixupViews" context:nil]; if ([[AppDelegate ad] adBannerViewIsVisible]) { CGRect adBannerViewFrame = [[[AppDelegate ad] sharedAdBannerView] frame]; adBannerViewFrame.origin.x = 0; adBannerViewFrame.origin.y = 0; [[[AppDelegate ad] sharedAdBannerView] setFrame:adBannerViewFrame]; CGRect contentViewFrame = _contentView.frame; contentViewFrame.origin.y = iAD_BANNER_HEIGHT; contentViewFrame.size.height = self.view.frame.size.height - iAD_BANNER_HEIGHT; _contentView.frame = contentViewFrame; } else { CGRect adBannerViewFrame = [[[AppDelegate ad] sharedAdBannerView] frame]; adBannerViewFrame.origin.x = 0; adBannerViewFrame.origin.y = -(iAD_BANNER_HEIGHT); [[[AppDelegate ad] sharedAdBannerView] setFrame:adBannerViewFrame]; CGRect contentViewFrame = _contentView.frame; contentViewFrame.origin.y = 0; contentViewFrame.size.height = self.view.frame.size.height; _contentView.frame = contentViewFrame; } [UIView commitAnimations]; } }
解决方法
使用NSNotificationCenter来解决这个问题就像一个魅力,现在我的iAds一旦加载就会出现 – 耶!如果其他人需要这个是我输入的额外代码:
(在我的appDelegate.m中)
(在我的appDelegate.m中)
- (void)bannerViewDidLoadAd:(ADBannerView *)banner { NSLog(@"bannerViewDidLoadAD"); if (!_adBannerViewIsVisible) { _adBannerViewIsVisible = YES; [[NSNotificationCenter defaultCenter] postNotificationName:@"adjustAdBannerView" object:nil]; }
}
- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
{
NSLog(@"BannerAd didfailtoreceive"); if (_adBannerViewIsVisible) { _adBannerViewIsVisible = NO; [[NSNotificationCenter defaultCenter] postNotificationName:@"adjustAdBannerView" object:nil]; }
}
在我的View Controller中(在viewWillAppear中):
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(fixupAdView) name:@"adjustAdBannerView" object:nil];