IAd - Unable to click banner

I am creating a universal application template.

This template should support additional iAds and possibly all orientations.

I have encoded a solution just to find a fancy bug. in certain situations, I was not able to click on the banner

Then I transcoded another revision, tidied everything up and cut out most of the code to detect the failure of the minimum test.

https://github.com/pi-/iAdUniversalTemplate/commit/2c829d268a9452e1a054802e7ccb9cde5de17853

There are only 3 views in this new code: window, uberview (view controller view) and banner ad

So, the banner displays correctly after it is submitted, autorotation works fine ... I registered a frame and frames for each, and everything is as it should be.

But it doesn't respond to click (well, click because I'm in the simulator)

What could be wrong? I'm starting to suspect that by cutting out the XIB from the project and embedding the window and looking at the controller from the code, I missed something or moved something up and down.

Juicy code snippets:

AppDelegate.m

- (BOOL) application: (UIApplication *) application didFinishLaunchingWithOptions: (NSDictionary *) launchOptions { NSLog(@"--> ___PROJECTNAME___AppDelegate:didFinishLaunchingWithOptions..."); // FIXED: now entry in info.plist hides SB BEFORE launch [[UIApplication sharedApplication] setStatusBarHidden: (SHOW_SB ? NO : YES)]; CGRect appFrame = [UIScreen mainScreen].applicationFrame; // windowRect must start at 0, 0 // if (SHOW_SB == YES), appFrame will be '{{0, 20}, {320, 460}}' CGRect windowRect = CGRectMake(0, 0, appFrame.size.width, appFrame.size.height); self.window = [[[UIWindow alloc] initWithFrame: windowRect] autorelease]; self.viewController = [ [ [ ___PROJECTNAME___ViewController alloc ] init ] autorelease ]; [self.window setRootViewController: viewController]; // triggers loadView [self.window makeKeyAndVisible]; return YES; } 

iAdVC.m

 - (void) loadView { self.uberView = [[[UIView alloc] initWithFrame: [UIScreen mainScreen].applicationFrame] autorelease]; self.uberView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; self.uberView.autoresizesSubviews = YES; self.uberView.clipsToBounds = YES; //UIWindow * w = self.view.window; //w.clipsToBounds = YES; [self setView: uberView]; showingBanner = NO; adBannerView = nil; if (IADS_ENABLED) { NSString * P = ADBannerContentSizeIdentifierPortrait; NSString * L = ADBannerContentSizeIdentifierLandscape; self.adBannerView = [[[ADBannerView alloc] initWithFrame:CGRectZero] autorelease]; self.adBannerView.delegate = self; self.adBannerView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin; self.adBannerView.requiredContentSizeIdentifiers = [NSSet setWithObjects: P, L, nil]; self.adBannerView.currentContentSizeIdentifier = UIInterfaceOrientationIsPortrait( self.interfaceOrientation ) ? P : L ; [uberView addSubview: adBannerView]; } UIWindow * w = [[UIApplication sharedApplication] keyWindow]; w.userInteractionEnabled = YES; self.uberView.userInteractionEnabled = YES; self.adBannerView.userInteractionEnabled = YES; w.clipsToBounds = YES; self.uberView.clipsToBounds = YES; self.adBannerView.clipsToBounds = YES; w.opaque = YES; self.uberView.opaque = YES; self.adBannerView.opaque = YES; } // - - - - - - - - - - - - - - - - - - - - - - - - - - #pragma mark Autorotate - (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation { return YES; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - (void) willRotateToInterfaceOrientation: (UIInterfaceOrientation) newOrientation duration: (NSTimeInterval) duration { bool isLandscape = UIInterfaceOrientationIsLandscape(newOrientation); self.adBannerView.currentContentSizeIdentifier = isLandscape ? ADBannerContentSizeIdentifierLandscape : ADBannerContentSizeIdentifierPortrait ; } #pragma mark Banner // - - - - - - - - - - - - - - - - - - - - - - - - - - - (void) bannerViewDidLoadAd: (ADBannerView *) banner { if (! showingBanner) { showingBanner = YES; // ... (optionally animate in) } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - (void) bannerView: (ADBannerView *) banner didFailToReceiveAdWithError: (NSError *) error { NSLog(@"FAIL"); if (showingBanner) { showingBanner = NO; // ... (optionally animate out) } } // - - - - - - - - - - - - - - - - - - - - - - - - - - -(BOOL) bannerViewActionShouldBegin: (ADBannerView *) banner willLeaveApplication: (BOOL) willLeave { return YES; // doesnt get hit } // = = = = = = = = = = = = = = = = = = = = = = = = = = 
+6
iphone templates xib iad
source share
3 answers

It was a bug bitch for fucking

As a result, I had to use one of my two hot cases of ITS and lost a full-time job on it.

Set the uberView backgroundColor property to NOTHING, but non-nil fixes the problem.

This is one of the things XIB magic does.

There is a tool called nib2objc that converts XIB to code. this would be the next step if I had to debug it myself to actually see what Apple's default XIB is in and see what I can't do manually.

But this is a mistake in UIKit. An Apple ITS spokesperson told me to do this, which I did.

+8
source share

I had the same problem, but using [UIColor clearColor] for the supervisor background did not help. (This is on iOS 4.3.3)

All supervisors must have an opaque color set.

+2
source share

I confirm that the addition

 self.window.backgroundColor = [UIColor whiteColor]; 

in the didFinishLaunchingWithOptions function works fine.

0
source share

All Articles