我以编程方式将 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 的两个值之间切换?