如何避免让每个viewController成为一个adWhirl委托? (有AdWhirl设计模式)

时间:2012-05-23 13:38:31

标签: ios iad adwhirl

背景 上周我问了一个关于在多个viewControllers中使用adWhirl的问题,但不幸的是我还没有得到它。

我接受了建议,现在在每个viewController中使用在app delegate中创建的一个adWhirl实例,但我看不到如何在viewController(adWhirlDidReceiveAd:, adWhirlDidFailToReceiveAd:等)中响应adWhirl委托事件。因为app委托人不知道哪个viewController当前正在显示其adView。

因此我的困惑......

这有设计模式吗?我认为必须有。如果我可以避免,我不想用样板adWhirl委托代码给我所有的viewControllers打好它。

我现在在每个viewController中得到的是下面的内容。我尝试在应用程序委托中设置一个方法,每个视图控制器可以调用“注册”,即获取应用程序委托的adView的所有权 - 认为当委托收到adWhirlDidReceiveAd之类的事件时,它可以完成工作下面。这种方式有效,但让我觉得我正在重新发明轮子。

问题:是否存在跨多个viewControllers使用adWhirl视图的设计模式?

- (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 个答案:

答案 0 :(得分:1)

显而易见的答案是创建一个所有视图控制器都将成为子类的Controller类。那么

AdviewDelegateController : UIViewController

YourViewController : AdviewDelegateController

然后您将所有的adview逻辑放在AdviewDelegateController中。