加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xcode – 使用UITableViews在app上使用ADBannerView的共享实例

发布时间:2020-12-14 17:49:50 所属栏目:百科 来源:网络整理
导读:我有一个带有多个UITableViews的应用程序,我正在实现iADs.根据Apple文档( http://developer.apple.com/library/ios/#technotes/tn2286/_index.html#//apple_ref/doc/uid/DTS40011212),我创建了一个属于我的应用程序委托的共享横幅,应用程序委托也是横幅的委
我有一个带有多个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中)

- (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];

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读