iOS. Приемы программирования - стр. 51
>#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: secondViewController];
>UITabBarController *tabBarController = [[UITabBarController alloc] init];
>[tabBarController setViewControllers:
>@[firstNavigationController, secondNavigationController]];
>self.window.rootViewController = tabBarController;
>return YES;
>}
Что получается? Именно то, что мы хотели (рис. 1.43).
Рис. 1.43. Панель вкладок, на которой контроллеры видов находятся внутри навигационных контроллеров
Как было показано на рис. 1.38, каждый элемент панели вкладок может содержать текст или изображение. Мы узнали, что, пользуясь свойством title контроллера вида, можно задавать такой текст. А что насчет изображения? Оказывается, у каждого контроллера вида есть и свойство tabItem. Это свойство соответствует той вкладке, которая находится в актуальном контроллере вида. Вы можете пользоваться этим свойством, чтобы задавать изображение для вкладки. Изображение для вкладки задается через ее свойство image. Я уже сделал два изображения – прямоугольник и кружок, а теперь выведу их как изображения для вкладок, соответствующих каждому из моих контроллеров видов. Вот код для первого контроллера вида:
>– (id)initWithNibName:(NSString *)nibNameOrNil
>bundle:(NSBundle *)nibBundleOrNil{
>self = [super initWithNibName: nibNameOrNil