Вандад Нахавандипур

iOS. Приемы программирования


Скачать книгу

NULL];

      SecondViewController *secondViewController = [[SecondViewController alloc]

      initWithNibName: nil

      bundle: NULL];

      UITabBarController *tabBarController = [[UITabBarController alloc] init];

      [tabBarController setViewControllers:@[firstViewController,

      secondViewController

      ]];

      self.window.rootViewController = tabBarController;

      return YES;

      }

      Когда панель вкладок отобразится на экране, ее элементы будут расположены именно так, как показано на рис. 1.38. Имя каждого из этих элементов основывается на названии того контроллера вида, который соответствует конкретному элементу. Определим заголовки для обоих контроллеров наших видов.

      Когда загружается панель вкладок, вместе с ней загружается контроллер вида первого входящего в нее элемента. Все остальные контроллеры видов инициализируются, но их виды не загружаются. Это означает, что любой код, который вы напишете во viewDidLoad второго контроллера вида, не выполнится до тех пор, пока пользователь не нажмет второй элемент этой панели в первый раз. Поэтому если вы присвоите заголовок панели контроллеру второго вида в его viewDidLoad и запустите приложение, то обнаружите, что заголовок панели вкладок по-прежнему пуст.

      Первый контроллер вида мы назовем First:

      #import "FirstViewController.h"

      @implementation FirstViewController

      – (id)initWithNibName:(NSString *)nibNameOrNil

      bundle:(NSBundle *)nibBundleOrNil{

      self = [super initWithNibName: nibNameOrNil

      bundle: nibBundleOrNil];

      if (self!= nil) {

      self.title = @"First";

      }

      return self;

      }

      – (void)viewDidLoad{

      [super viewDidLoad];

      self.view.backgroundColor = [UIColor whiteColor];

      }

      А второй контроллер вида будет называться Second:

      #import "SecondViewController.h"

      @implementation SecondViewController

      – (id)initWithNibName:(NSString *)nibNameOrNil

      bundle:(NSBundle *)nibBundleOrNil{

      self = [super initWithNibName: nibNameOrNil

      bundle: nibBundleOrNil];

      if (self!= nil) {

      self.title = @"Second";

      }

      return self;

      }

      – (void)viewDidLoad{

      [super viewDidLoad];

      self.view.backgroundColor = [UIColor whiteColor];

      }

      Теперь запустим приложение и посмотрим, что получилось (рис. 1.42).

      Рис. 1.42. Очень простая панель вкладок, на которой находятся два контроллера вида

      Как видите, у контроллеров видов нет навигационной панели. Что делать? Все просто. Как вы помните, UINavigationController – это подкласс UIViewController. Итак, мы можем добавлять экземпляры навигационных контроллеров на панель вкладок, а внутрь каждого навигационного контроллера загрузить контроллер вида. Чего же мы ждем?

      – (BOOL) application:(UIApplication *)application

      didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

      // Точка переопределения для специальной настройки,

      // выполняемой после запуска приложения.

      self.window = [[UIWindow alloc] initWithFrame:

      [[UIScreen mainScreen] bounds]];

      [self.window makeKeyAndVisible];

      FirstViewController *firstViewController = [[FirstViewController alloc]

      initWithNibName: nil

      bundle: NULL];

      UINavigationController *firstNavigationController =

      [[UINavigationController alloc]

      initWithRootViewController: firstViewController];

      SecondViewController *secondViewController = [[SecondViewController alloc]

      initWithNibName: nil

      bundle: NULL];

      UINavigationController *secondNavigationController =

      [[UINavigationController alloc]

      initWithRootViewController: