次のように、プログラムで UINavigationBar に UISegmentedControl を追加しています
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 Documentationを読んだところ、これはタッチ イベントのイベント処理を設定する適切な方法です。
ただし、プログラムを (シミュレーターで) 実行してセグメントをタップすると、次のことが起こります。
- 最初のセグメント (インデックス 0) の場合、「null」がコンソールに記録されます
- 2 番目のセグメント (インデックス 1) の場合、プログラムは EXC_BAD_ACCESS でクラッシュします。
デバッガーの変数ウィンドウを見ると、sender は UISegmentedControl 型で、_selectedSegment プロパティは正しい (0 または 1) ようです。
私は何に不適切にアクセスしていますか? UISegmentedController の 2 つの値を切り替えるようにデリゲート関数を設定するにはどうすればよいですか?