Посмотрите на SegmentViewController.{h,m}
в примере проекта UICatalog.
Пример кода настраивает вид с использованием кода.
Эта строка
[segmentedControl addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];
- вот где происходит магия.
- (void)segmentAction:(id)sender
{
//NSLog(@"segmentAction: selected segment = %d", [sender selectedSegmentIndex]);
}
Вы также можете сделать это в Интерфейсном Разработчике
Предполагая, что в вашем ViewController объявлено (IBAction)segmentAction:(id)sender
, а владельцем файлов является ваш ViewController, щелкните правой кнопкой мыши UISegmentedControl и установите соединение между событием UIControlEventValueChanged
и владельцем файла segmentAction
.
UISegmentedControl действует как «одиночная» кнопка. Это отдельный объект, помещенный в один кадр, в отличие от элементов панели инструментов, которые представляют собой массив объектов, размещенных в своих собственных кадрах. Типичный шаблон использования - отправка сообщения внутри оператора switch в вашем сегменте метода.
Я вижу два варианта.
Вариант A: реализовать пользовательское представление, содержащее массив элементов управления UIButton. Действие для события UITouchUpInside для всех кнопок может указывать на один и тот же метод в вашем контроллере. Затем внедрите отправителя buttonPressed: (id), который вы можете попросить отправителя указать его фрейм и местоположение, чтобы использовать его для создания нового представления сверху. -> Сложный
Вариант B: Вы можете рассчитать положение нового подпредставления, используя смещение, рассчитанное из selectedSegmentedIndex
, widthForSegmentAtIndex:
и contentOffsetForSegmentAtIndex:
. На самом деле мало чем отличается от расчета по границам любого представления. -> Проще