2012-03-14 2 views
6

Я хочу использовать AdMob в своем приложении, и у меня есть 4 viewControllers (в 4 вкладках), где я хочу сделать его видимым. Как показывает образец, каждый ViewController должен сделать экземпляр экземпляра и добавить его как subview.AdMod один экземпляр во всех ViewControllers

Я все еще думаю, что может быть каким-то образом использовать только один экземпляр, который можно использовать во всех приложениях. Как я могу это сделать?

Если я создаю 1 экземпляр в AppDelegate как autorelease и сохраняю в каждом viewController и на viewDidUnload отпустите его, а затем в следующий элемент табуляции (viewController) я снова сохранил его и т. Д. ... это хороший подход?

ответ

2

AppDelegate aproach - отличный подход, но вы не должны сохранять экземпляр admob в каждом контроллере view и выпускать его в методе viewDidUnload. Вместо этого просто добавьте представление admob в каждый метод viewcontroller viewDidLoad как подвью. Таким образом, в AppDelegate будет только один экземпляр представления Admob.

Надеюсь, это вам поможет.

+0

Вы не можете добавить один вид в виде подсмотра для нескольких видов. – beryllium

3

Вы можете объявить свой вид admob в appDelegate и добавить его в качестве subview в окно. Обратитесь к admob view из VC через appDelegate

7

Несомненно, это сработает, но единственная проблема в том, что при обновлении делегата для объявления он фактически не возьмет нового делегата для объявления, если вы явно не сделаете новый запрос объявления, поэтому ваши старые представления будут получать уведомления из объявления. Я бы рекомендовал использовать admob singleton, который затем пересылает любые уведомления делегатов в правильное представление.

Так создать класс под названием GADMasterViewController (убедитесь, что следует GADBannerViewDelegate протокол тоже) или что-то, который имеет статический инициализатор, как так:

+(GADMasterViewController *)singleton { 
    static dispatch_once_t pred; 
    static GADMasterViewController *shared = nil; 
    dispatch_once(&pred, ^{ 
    shared = [[GADMasterViewController alloc] init]; 
    }); 
    return shared; 
} 

Тогда в инициализаторе вы можете инициализировать один GADBannerView как свойство этого одноточечного:

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

Тогда вы можете иметь метод, который устанавливает свой новый AdView как currentDelegate как таковой:

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

На данный момент, вы просто хотите, чтобы направлять любые уведомления, которые вы получите в правую ViewController, поэтому один пример будет:

- (void)adViewDidReceiveAd:(GADBannerView *)view { 
    if ([currentDelegate_ respondsToSelector:@selector(adViewDidReceiveAd:)]) { 
    [currentDelegate_ adViewDidReceiveAd:view]; 
    } 
} 

В ViewControllerX (один из ваших 4 ViewControllers), вы могли бы просто добавьте его в свою иерархию просмотров, используя:

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    shared = [GADMasterViewController singleton]; 
    [shared resetAdView:self]; 
} 
+0

Спасибо всем. – Anand

+3

Спасибо, Радж, за отличный ответ. Для всех, кто читает это, вы также можете прочитать http://googleadsdeveloper.blogspot.co.il/2012/04/creating-gadbannerview-singleton-in.html – kernix

Смежные вопросы