如何在 xcode5 上设置共享的 iAd 横幅



我有多个视图控制器,我想运行iAd。iAd 设置正确并在第一个控制器上工作,但我收到委派错误。


adView.delegate = self;
[adView setHidden:YES];

为您的广告创建单例。 这是您的 .h:

#import <iAd/iAd.h>
@interface AEMIAd : NSObject <ADBannerViewDelegate>{
    ADBannerView *adView;
    BOOL bannerIsVisible;
}
@property (nonatomic, strong) ADBannerView *adView;
+(AEMIAd *)sharedAd;
@end

和您的 .m:

#import "AEMIAd.h"
static AEMIAd *sharedAd = nil;
@implementation AEMIAd
@synthesize adView;
- (id)init
{
    if (self)
    {
        // On iOS 6 ADBannerView introduces a new initializer, use it when available.
        if ([ADBannerView instancesRespondToSelector:@selector(initWithAdType:)])
        {
            adView = [[ADBannerView alloc] initWithAdType:ADAdTypeBanner];
        } else adView = [[ADBannerView alloc] init];
        CGRect screenBounds = [[UIScreen mainScreen] bounds];
        adView.frame = CGRectOffset(adView.frame, 0.0f, screenBounds.size.height-50.0f);
        adView.delegate = self;
    }
    return self;
}
-(BOOL)allowActionToRun
{
    return TRUE;
}
-(void)bannerViewDidLoadAd:(ADBannerView *)banner
{
    [self.adView setHidden:NO];
    bannerIsVisible = YES;
}
-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
{
    [self.adView setHidden:YES];
    bannerIsVisible = NO;
}

+(AEMIAd *)sharedAd
{
    if (!sharedAd) sharedAd = [[self alloc] init];
    return sharedAd;
}

每个视图控制器中的延迟实例化:

-(ADBannerView *)adView
{
    if (!_adView) _adView = [[AEMIAd sharedAd] adView];
    return _adView;
}

和:

-(void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [adView removeFromSuperview];
}

仅此而已。

最新更新