ho adattato l'approccio proposto nella iAdSuite qui proposta
http://developer.apple.com/library/ios/#samplecode/iAdSuite/Introduction/Intro.html
Ho scaricato il codice e focalizzato sull'esempio della "scheda".Ho copiato su BannerViewController.h/.m come è nel mio progetto.
Ho creato tutte le mie viste nel solito modo con l'approccio dello storyboard. Tuttavia, nella mia classe AppDelegate ho quindi avuto accesso alla barra delle schede già costruita, che conteneva tutti i viewControllers costruiti nello storyboard.
La classe AppDelegate implementa il protocollo TabBarControllerDelegate:
@interfaceAppDelegate : UIResponder <UITabBarControllerDelegate, UIApplicationDelegate>
Procedimento didFinishLaunchingWithOptions attuazione AppDelegate afferra barra delle linguette pre-costruita, impostando il suo delegato sé (ad esempio la classe AppDelegate).
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
// ----------------------------------------------------------
// Set the TabBarController delegate to be 'self'
// ----------------------------------------------------------
_tabBarController = (UITabBarController*)self.window.rootViewController;
// tabController.selectedIndex = [defaults integerForKey:kOptionLastTabSelectedKey];
_tabBarController.delegate = self;
// update tab bar per iAdSuite approach
[self updateiAd];
ho poi costruito una nuova serie di controllori per l'approccio iAdSuite e ripristinare la barra delle schede con questi nuovi elementi barra delle schede.
-(void)updateiAd {
NSArray* viewControllers = [_tabBarController viewControllers];
NSMutableArray*newViewControllers = [[NSMutableArray alloc] init];
BannerViewController*bvc=NULL;
for(UIViewController * vc in viewControllers) {
bvc = [[BannerViewController alloc] initWithContentViewController:vc];
[newViewControllers addObject:bvc];
}
// set the new view controllers, replacing the original set
[_tabBarController setViewControllers:newViewControllers];
}
Questo approccio mette lo stesso 'annuncio' in fondo a ogni vista, esattamente come aveva bisogno. Dovevo anche impostare il titolo della vista nel metodo viewDidLoad di ogni viewController personalizzato (in qualche modo, impostarlo sull'elemento della barra non sembrava funzionare, non aveva impostato l'immagine, ma in seguito potrebbe riflettere un problema con le mie immagini).
La mia configurazione originale è stato
TabViewController
NavController1 NavController2 NavController3 ...
| | |
CustomViewController1 CustomViewController2 CustomViewController3
La mia configurazione finale è ora
TabViewController
NavController1 NavController2 NavController3 ...
| | |
iAdView1 iAdView2 iAdView3
| | |
CustomViewController1 CustomViewController2 CustomViewController3
In termini di vista del ciclo di vita, devo aggiungere che solo i NavControllers sono in atto al momento il metodo updateiAd è chiamato.
I singoli CustomViewControllers1/2/3/etc vengono creati dopo il completamento della chiamata.
Molto utile, ci sto provando ora. – bentford
ho implementato qualcosa di simile ma ho avuto difficoltà nelle visualizzazioni in cui utilizzo UISearchBar come tableViewHeader e nelle viste in cui la navBar è trasparente – coneybeare
Questo sembra funzionare davvero –