2012-05-23 4 views
1

배경 : 지난 주에 여러 개의 viewControllers에서 adWhirl을 사용하는 것에 대해 질문을했지만 불행히도 아직 이해가 안갑니다. 모든 viewController를 adWhirl 대리자로 만들지 않으려면 어떻게해야하나요? (AdWhirl 디자인 패턴이 있습니까?)

내가 제안을했다 지금은 애플 대리자에서 생성 한 애드 월의 인스턴스를 사용, 각각의 ViewController에서하지만 난 응용 프로그램 이후 (등 adWhirlDidReceiveAd:, adWhirlDidFailToReceiveAd:) 내의 ViewController에서 애드 월 대의원 이벤트에 응답 할 수있는 방법이 표시되지 않습니다 delegate는 현재 어떤 viewController가 해당 adView를 표시하고 있는지 알지 못합니다.

따라서 내 혼란 ...

디자인 패턴이 있습니까? 내가 있어야 할 것 같아. 피할 수만 있다면 모든 보편적 인 adWhirl 대리자 코드를 사용하여 모든 뷰 컨트롤러를 관리하고 싶지 않습니다.

각 viewController에서 지금 얻은 내용은 다음과 같습니다. 나는 각각의 뷰 컨트롤러가 "위임 (delegate)이 adWhirlDidReceiveAd과 같은 이벤트를받을 때, 아래의 작업을 할 수 있다고 생각하는 앱 위임자의 adView의 소유권을 가져 오는"등록 "이라고 부를 수있는 앱 위임의 메소드를 설정하려고 시도했다. 이런 종류의 일은 제가 바퀴를 다시 발명한다고 생각하게 만듭니다.

질문 : 여러 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

확실한 대답은 모든보기 컨트롤러가 하위 클래스가 될 Controller 클래스를 만드는 것입니다. 그럼

AdviewDelegateController : UIViewController 

YourViewController : AdviewDelegateController 

는 당신이 AdviewDelegateController에 모든 AdView가 로직을 넣어.

+0

감사합니다. 작동 중입니다. 초보자에게는 그리 명백하지 않습니다 ... –