Как создать глобальную ссылку для iAd и реализовать ее в нескольких Viewcontrollers

У меня есть 5 ViewControllers в каждом из которых мне нужно отобразить iAd, так что я должен реализовать код iAd в каждом ViewControllers. Вместо этого, если я создаю набор общего кода в AppDelegate, это означает, что я могу просто вызывать этот код везде, где нужно, чтобы iAd отображался.

Если кто-то реализовал эту концепцию iAd, значит помогите мне выбраться из этой проблемы. Заранее спасибо.

3 ответа

Просто создайте указатель на iAD в приложении APP.

.час:

@property (strong, nonatomic) ADBannerView *UIiAD;

.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    UIiAD = [[ADBannerView alloc] init];
    return YES;
} 

Затем в ваших ViewControllers сделайте это:

.час:

@property (strong, nonatomic) ADBannerView *UIiAD;

.m:

- (AppDelegate *) appdelegate {
    return (AppDelegate *)[[UIApplication sharedApplication] delegate];
}

- (void) viewWillAppear:(BOOL)animated {
    UIiAD = [[self appdelegate] UIiAD];
    UIiAD.delegate=self;
   // CODE to correct the layout
}

- (void) viewWillDisappear:(BOOL)animated{
    UIiAD.delegate=nil;
    UIiAD=nil;
    [UIiAD removeFromSuperview];
}

Сделайте это для всех контроллеров представления с соответствующим кодом для изменения макета!

Привет, это выглядит как хороший ответ, но вам не нужно импортировать AppDelegate в ваших m файлов

#import "AppDelegate.h" 

и вы не должны скрывать добавление, если нет подключения к сети или добавление не отображается

В AppDelegate.h:

#import <iAd/iAd.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
    ADBannerView *_bannerView;
...
...
}

@property (nonatomic, retain) ADBannerView *_bannerView;

В AppDelegate.m:

@synthesize _bannerView;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
    if ([ADBannerView instancesRespondToSelector:@selector(initWithAdType:)]) {
        self._bannerView = [[ADBannerView alloc] initWithAdType:ADAdTypeBanner];
    } else {
        self._bannerView = [[ADBannerView alloc] init];
    }
...
}

В контроллерах представления, которые необходимо добавить в iAd, создайте контейнер UIView с именем 'vwAd' и установите соединение в xib-файле, в котором вы хотите отобразить iAds.

@interface ViewController : UIViewController<ADBannerViewDelegate>
{
    IBOutlet UIView *vwAd;
...
...
}

- (void)layoutAnimated:(BOOL)animated
{
    CGRect contentFrame = self.view.bounds;
    if (contentFrame.size.width < contentFrame.size.height) {
        self.appDelegate._bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait;
    } else {
        self.appDelegate._bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierLandscape;
    }

    CGRect bannerFrame = self.appDelegate._bannerView.frame;
    if (self.appDelegate._bannerView.bannerLoaded) {
        bannerFrame.origin.y = 0;
    } else {
        bannerFrame.origin.y = vwAd.frame.size.height;
    }

    [UIView animateWithDuration:animated ? 0.25 : 0.0 animations:^{
        self.appDelegate._bannerView.frame = bannerFrame;
    }];
}


- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    ...

    [self.appDelegate._bannerView removeFromSuperview];
    self.appDelegate._bannerView.delegate = nil;
    self.appDelegate._bannerView.delegate = self;
    [vwAd addSubview:self.appDelegate._bannerView];
    [self layoutAnimated:NO];
}

Пожалуйста, ознакомьтесь также с примерами iAdSuite от Apple. Оригинальную функцию layoutAnimated можно найти в примерах iAdSuite. Не забудьте добавить функции делегата из примера iAdSuite в ваш контроллер представления.

Другие вопросы по тегам