2012-05-23 6 views
1

Фон: В прошлой неделе я задал вопрос об использовании adWhirl через несколько viewControllers, но, к сожалению, я до сих пор не получаю его.Как не сделать каждый viewController делегатом adWhirl? (есть шаблон дизайна AdWhirl)

Я принял эти предложения и теперь использовал один экземпляр adWhirl, созданный в делегате приложения, в каждом диспетчере viewController, но я не вижу, как я могу ответить на события делегата adWhirl в моем диспетчере viewController (adWhirlDidReceiveAd:, adWhirlDidFailToReceiveAd: и т. Д.), Так как приложение делегат не знает, какой viewController в настоящее время отображает его adView.

Поэтому моя путаница ...

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

То, что у меня сейчас есть в каждом представлении, находится ниже. Я попытался настроить метод в делетете приложения, который каждый контроллер представления мог вызвать «зарегистрироваться», который взял на себя управление adView делегата приложения, - полагая, что, когда делегат получает такие события, как adWhirlDidReceiveAd, он мог бы выполнить описанную ниже работу. Такой вид работы заставлял меня думать, что я изобретаю колесо.

Вопрос: Есть ли шаблон дизайна для использования объявления adWhirl через несколько viewControllers?

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 

AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; 

[self.view addSubview:appDelegate.adView]; 
[self.view bringSubviewToFront:appDelegate.adView]; 

CGSize adSize = [appDelegate.adView actualAdSize]; 
CGRect onScreenFrame = appDelegate.adView.frame; 
onScreenFrame.size.height = adSize.height; // fit the ad 
onScreenFrame.size.width = adSize.width; 
onScreenFrame.origin.x = (self.view.frame.size.width - adSize.width)/2; // center 
onScreenFrame.origin.y = (self.view.frame.size.height - adSize.height); 

appDelegate.adView.frame = onScreenFrame; 

} 


- (void)viewDidDisappear:(BOOL)animated 
{ 
AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; 
[appDelegate.adView removeFromSuperview]; 
} 

ответ

1

Очевидным ответом является создание класса контроллера, который все ваши контроллеры представлений станут подклассами. Итак

AdviewDelegateController : UIViewController 

и

YourViewController : AdviewDelegateController 

тогда вы положили всю свою AdView логику в AdviewDelegateController.

+0

Спасибо, что он работает. Не так очевидно новичкам ... –

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

  • Нет связанных вопросов^_^