iOS. Приемы программирования. Вандад Нахавандипур. Читать онлайн. Newlib. NEWLIB.NET

Автор: Вандад Нахавандипур
Издательство: ""Издательство ""Питер""
Серия: Бестселлеры O’Reilly (Питер)
Жанр произведения: Программирование
Год издания: 2014
isbn: 978-5-496-01016-0
Скачать книгу
расположенными в правом верхнем углу на рис. 1.36. А почему бы нам тоже так не сделать? Впечатление такое, как будто в кнопку встроен сегментированный элемент управления (см. раздел 1.8). Итак, нам нужно создать такой элемент управления с двумя сегментами, добавить его на навигационную кнопку и, наконец, поставить эту кнопку на навигационную панель. Начнем:

      – (void) segmentedControlTapped:(UISegmentedControl *)paramSender{

      switch (paramSender.selectedSegmentIndex){

      case 0:{

      NSLog(@"Up");

      break;

      }

      case 1:{

      NSLog(@"Down");

      break;

      }

      }

      }

      – (void)viewDidLoad{

      [super viewDidLoad];

      self.title = @"First Controller";

      NSArray *items = @[

      @"Up",

      @"Down"

      ];

      UISegmentedControl *segmentedControl = [[UISegmentedControl alloc]

      initWithItems: items];

      segmentedControl.momentary = YES;

      [segmentedControl addTarget: self

      action:@selector(segmentedControlTapped:)

      forControlEvents: UIControlEventValueChanged];

      self.navigationItem.rightBarButtonItem =

      [[UIBarButtonItem alloc] initWithCustomView: segmentedControl];

      }

      На рис. 1.41 показано, что должно получиться в итоге.

      Рис. 1.41. Сегментированный элемент управления, встроенный в навигационную кнопку

      Элемент navigationItem любого контроллера вида имеет еще два замечательных метода:

      • setRightBarButtonItem: animated: – задает правую кнопку навигационной панели;

      • setLeftBarButtonItem: animated: – определяет левую кнопку навигационной панели.

      Оба метода позволяют указывать, хотите ли вы анимировать кнопку. Задайте значение YES для параметра animated, если анимация нужна:

      UIBarButtonItem *rightBarButton =

      [[UIBarButtonItem alloc] initWithCustomView: segmentedControl];

      [self.navigationItem setRightBarButtonItem: rightBarButtonanimated: YES];

      См. также

      Подраздел «Создание и запуск вашего первого приложения для iOS» раздела 1.0 данной главы. Разделы 1.2, 1.8, 1.12.

      1.16. Представление контроллеров, управляющих несколькими видами, с помощью UITabBarController

      Постановка задачи

      Необходимо дать пользователям возможность переключаться из одного раздела вашего приложения в другой, причем делать это просто.

      Решение

      Используйте класс UITabBarController.

      Обсуждение

      Если вы пользуетесь iPhone как будильником, то, разумеется, замечали на экране панель вкладок. Взгляните на рис. 1.38. В нижней части экрана расположены значки, которые называются World Clock (Мировое время), Alarm (Будильник), Stopwatch (Секундомер) и Timer (Таймер). Вся черная полоса в нижней части экрана – это панель вкладок, а вышеупомянутые ярлыки – ее элементы.

      Панель вкладок – это контейнерный контроллер. Это значит, что мы создаем экземпляры UITabBarController и добавляем их в окно нашего приложения. Для каждого элемента панели вкладок мы добавляем на эту панель навигационный контроллер или контроллер вида. Эти элементы будут отображаться как вкладки на панели. Контроллер панели вкладок содержит панель вкладок типа UITabBar. Мы не создаем этот объект вручную – мы создаем контроллер панели вкладок, а уже он создает для нас такой объект. Проще говоря, считайте, что мы инстанцируем контроллер панели вкладок, а потом задаем контроллеры видов для этой панели. Данные контроллеры видов будут относиться к типу UIViewController или UINavigationController, если мы собираемся создать по контроллеру для каждого элемента панели вкладки (они же – контроллеры