Я программно добавляю UISegmentedControl в свой UINavigationBar следующим образом
UISegmentedControl *toggleSwitch = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects: @"Bar", @"Scatter", nil]];
toggleSwitch.segmentedControlStyle = UISegmentedControlStyleBar;
[toggleSwitch addTarget:self action:@selector(toggleSwitched:) forControlEvents:UIControlEventValueChanged];
UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:toggleSwitch];
self.navigationItem.rightBarButtonItem = buttonItem;
[toggleSwitch release];
[buttonItem release];
Затем у меня есть метод toggleSwitched для обработки событий:
-(void) toggleSwitched:(id) sender {
if([sender isKindOfClass:[UISegmentedControl class]]) {
NSLog(@"%@",((UISegmentedControl*)sender).selectedSegmentIndex );
}
}
Из моего прочтения документации Apple, это правильный способ настроить обработку события касания.
ОДНАКО, когда я запускаю программу (в симуляторе) и касаюсь сегментов, происходит следующее:
- Если это первый сегмент (индекс 0), в консоль записывается 'null'
- Если это второй сегмент (индекс 1), программа вылетает с ошибкой EXC_BAD_ACCESS.
Когда я смотрю в окно переменных отладчика, отправитель имеет тип UISegmentedControl, и свойство _selectedSegment кажется правильным (0 или 1).
К чему я неправильно обращаюсь и как настроить функцию делегата для переключения между двумя значениями UISegmentedController?