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

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


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

1.6.

      1.8. Группирование компактных параметров с помощью UISegmentedControl

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

      Требуется предложить пользователям на выбор несколько параметров, из которых они могут выбирать. Пользовательский интерфейс должен оставаться компактным, простым и легким для понимания.

      Решение

      Используйте класс UISegmentedControl. Пример работы с этим классом показан на рис. 1.22.

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

      Обсуждение

      Сегментированный элемент управления – это сущность, позволяющая отображать в компактном пользовательском интерфейсе наборы параметров, из которых пользователь может выбирать нужный. Чтобы отобразить сегментированный элемент управления, создайте экземпляр класса UISegmentedControl. Начинаем работу с файла реализации (.m) нашего контроллера вида:

      #import "ViewController.h"

      @interface ViewController ()

      @property (nonatomic, strong) UISegmentedControl *mySegmentedControl;

      @end

      @implementation ViewController

      

      Создаем сегментированный элемент управления в методе viewDidLoad контроллера нашего вида:

      – (void)viewDidLoad{

      [super viewDidLoad];

      NSArray *segments = [[NSArray alloc] initWithObjects:

      @"iPhone",

      @"iPad",

      @"iPod",

      @"iMac", nil];

      self.mySegmentedControl = [[UISegmentedControl alloc]

      initWithItems: segments];

      self.mySegmentedControl.center = self.view.center;

      [self.view addSubview: self.mySegmentedControl];

      }

      Чтобы представить разные параметры, которые будут предлагаться на выбор в нашем сегментированном элементе управления, мы используем обычный массив строк. Такой элемент управления инициализируется с помощью метода initWithObjects:. Потом передаем сегментированному элементу управления массив строк и изображений. Результат будет как на рис. 1.22.

      Теперь пользователь может выбрать в сегментированном элементе управления один из параметров. Допустим, он выбирает iPad. Тогда пользовательский интерфейс сегментированного элемента управления изменится и покажет пользователю, какой параметр будет выбран. Получится такое изображение, как на рис. 1.23.

      Рис. 1.23. Пользователь выбрал один из вариантов в сегментированном элементе управления

      Возникает вопрос: как узнать, что пользователь выбрал в сегментированном элементе управления новый параметр? Ответ прост. Как и при работе с UISwitch или UISlider, применяется метод addTarget: action: forControlEvents: сегментированного элемента управления, к которому добавляется цель. Для параметра forControlEvents нужно задать значение UIControlEventValueChanged, так как именно это событие запускается, когда пользователь выбирает в сегментированном элементе управления новый параметр:

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

      if ([paramSender isEqual: self.mySegmentedControl]){

      NSInteger selectedSegmentIndex = [paramSender selectedSegmentIndex];

      NSString *selectedSegmentText =

      [paramSender titleForSegmentAtIndex: selectedSegmentIndex];

      NSLog(@"Segment %ld with %@ text is selected",

      (long)selectedSegmentIndex,

      selectedSegmentText);

      }

      }

      – (void)viewDidLoad{

      [super viewDidLoad];

      NSArray *segments = [[NSArray alloc] initWithObjects:

      @"iPhone",

      @"iPad",

      @"iPod",

      @"iMac", nil];

      self.mySegmentedControl = [[UISegmentedControl alloc]

      initWithItems: