여러 개의 UITableView가있는 앱이 있으며 iAD 구현 과정에 있습니다. 애플의 문서 (http://developer.apple.com/library/ios/#technotes/tn2286/_index.html#//apple_ref/doc/uid/DTS40011212)에 따라, 필자는 애플 리케이션 델리게이트에 속한 공유 배너를 만들었고 애플 리케이션 델리게이트는 배너의 델리게이트이다. 이는 잘 작동하며 배너가로드되고 사용자가 화면을 전환 한 후 다양한보기 컨트롤러에서 광고가 잘 표시됩니다.UITableViews가있는 앱에서 ADBannerView의 공유 인스턴스를 사용합니다.
문제는 뷰 컨트롤러 (내 "fixUpAdView"메서드를 호출하는 곳)의 viweWillAppear 메서드가 배너가로드되기 전에 표시되므로 첫 번째 viewController에 표시되는 광고가 없습니다.
은 내가이 점점 아니에요 부분 추측이 (사과 문서에서) : "가 표시하거나 배너를 숨겨야하는 경우 응용 프로그램 대리인이 현재 뷰 컨트롤러를 말하게 당신이 UINavigationControllerDelegate 또는 UITabBarControllerDelegate 프로토콜을 사용할 수 있습니다. 그것을 보여주기 위해 배너를 누르십시오. " 내 bannerViewDidLoadAd 및 failToReceive 메서드에 무언가를 집어 넣어야하지만이 작업을 수행하는 방법에 대해서는 다소 혼란 스럽습니다.
내 모든보기 컨트롤러 (그 중 6 개)에 광고를 게재하고 싶지 않고 앱에 여러 개의 모달보기가 있습니다 (이들 중 하나도 광고가 없습니다). 내 AppDelegate에에서 : 내보기 컨트롤러에서
- (void)bannerViewDidLoadAd:(ADBannerView *)banner {
NSLog(@"bannerViewDidLoadAD");
if (!_adBannerViewIsVisible)
_adBannerViewIsVisible = YES;
}
- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
{
NSLog(@"BannerAd didfailtoreceive");
if (_adBannerViewIsVisible)
_adBannerViewIsVisible = NO;
}
- (ADBannerView *)sharedAdBannerView
{
if (_sharedAdBannerView == nil) {
Class classAdBannerView = NSClassFromString(@"ADBannerView");
if (classAdBannerView != nil) {
_sharedAdBannerView = [[classAdBannerView alloc] initWithFrame:CGRectZero];
[_sharedAdBannerView setRequiredContentSizeIdentifiers:[NSSet setWithObjects:
ADBannerContentSizeIdentifier320x50,
ADBannerContentSizeIdentifier480x32, nil]];
[_sharedAdBannerView setCurrentContentSizeIdentifier:ADBannerContentSizeIdentifier320x50];
[_sharedAdBannerView setFrame:CGRectOffset([_sharedAdBannerView frame], 0,
-(iAD_BANNER_HEIGHT))];
[_sharedAdBannerView setDelegate:self];
}
}
return _sharedAdBannerView;
}
: 여기
내 코드의 일부입니다이 문제를 해결하기 위해 NSNotificationCenter를 사용하여- (void)viewWillAppear:(BOOL)animated {
if ([[AppDelegate ad] shouldShowAds]) {
if (!self.contentView) {
self.contentView = [[UIView alloc] initWithFrame:[[self view] bounds]];
[self.view addSubview:_contentView];
}
[self.contentView addSubview:topView];
[self fixupAdView];
[self.view addSubview:[[AppDelegate ad] sharedAdBannerView]];
}
[super viewWillAppear:NO];
}
#pragma mark
#pragma mark iADS
- (void)fixupAdView {
if ([[AppDelegate ad] sharedAdBannerView] != nil) {
[[[AppDelegate ad] sharedAdBannerView] setCurrentContentSizeIdentifier:ADBannerContentSizeIdentifier320x50];
[UIView beginAnimations:@"fixupViews" context:nil];
if ([[AppDelegate ad] adBannerViewIsVisible]) {
CGRect adBannerViewFrame = [[[AppDelegate ad] sharedAdBannerView] frame];
adBannerViewFrame.origin.x = 0;
adBannerViewFrame.origin.y = 0;
[[[AppDelegate ad] sharedAdBannerView] setFrame:adBannerViewFrame];
CGRect contentViewFrame = _contentView.frame;
contentViewFrame.origin.y = iAD_BANNER_HEIGHT;
contentViewFrame.size.height = self.view.frame.size.height -
iAD_BANNER_HEIGHT;
_contentView.frame = contentViewFrame;
}
else {
CGRect adBannerViewFrame = [[[AppDelegate ad] sharedAdBannerView] frame];
adBannerViewFrame.origin.x = 0;
adBannerViewFrame.origin.y = -(iAD_BANNER_HEIGHT);
[[[AppDelegate ad] sharedAdBannerView] setFrame:adBannerViewFrame];
CGRect contentViewFrame = _contentView.frame;
contentViewFrame.origin.y = 0;
contentViewFrame.size.height = self.view.frame.size.height;
_contentView.frame = contentViewFrame;
}
[UIView commitAnimations];
}
}
나는이 문제를 해결하기 위해 알림 센터를 사용하는 것에 대해 생각하고 있습니다 - 어떤 생각입니까? –