Я адаптировал подход, предложенный в iAdSuite, приведенном здесь
http://developer.apple.com/library/ios/#samplecode/iAdSuite/Introduction/Intro.html
Я скачал код и сосредоточился на примере с «вкладками». Я скопировал файл BannerViewController.h / .m как есть в мой проект.
Я создал все свои представления обычным способом с использованием раскадровки. Однако в моем классе AppDelegate я получил доступ к уже созданной панели вкладок, содержащей все встроенные viewControllers раскадровки.
Класс AppDelegate реализует протокол TabBarControllerDelegate:
@interfaceAppDelegate : UIResponder <UITabBarControllerDelegate, UIApplicationDelegate>
Реализация метода AppDelegate didFinishLaunchingWithOptions захватывает предварительно созданный tabBar, устанавливая его делегата на себя (например, класс 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];
Затем я создал новый набор контроллеров для подхода iAdSuite и сбросил панель вкладок с помощью этих новых элементов панели вкладок.
-(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];
}
Этот подход помещает одно и то же «объявление» внизу каждого представления, точно так, как необходимо. Я также должен был установить заголовок представления в методе viewDidLoad каждого настраиваемого viewController (каким-то образом установка его на элемент панели, похоже, не сработала, но и не установила изображение; однако позднее это может отражать проблему с моими изображениями). 1019 *
Моя первоначальная конфигурация была
TabViewController
NavController1 NavController2 NavController3 ...
| | |
CustomViewController1 CustomViewController2 CustomViewController3
Моя окончательная конфигурация теперь
TabViewController
NavController1 NavController2 NavController3 ...
| | |
iAdView1 iAdView2 iAdView3
| | |
CustomViewController1 CustomViewController2 CustomViewController3
С точки зрения жизненного цикла представления я должен добавить, что на момент вызова метода updateiAd существуют только NavController.
Отдельные CustomViewControllers1 / 2/3 / и т. Д. Создаются после завершения вызова.