私の目的は 、既に選択されているセグメントをタップしたときにUIControlEventValueChangedデリゲートを再度トリガーすることです。
だから私は以下のリンクを参照しました
uisegmentedcontrol-register-taps-on-selected-segment
リンクに従って、uisegmentedcontrol サブクラスを作成し、- (void) setSelectedSegmentIndex:(NSInteger)toValue {
メソッドを実装し、コードを記述しました (上記のリンクから)。
Ipad1で問題なく動作しました。ただし、継承/サブクラスのsetSelectedSegmentIndexは、既に選択されているセグメントをタップしたときに Ipad2 でトリガーされません!!!! ただし、選択されていないセグメント インデックスをタップすると正常に動作します。
私が行ったコードは以下のとおりです
メインクラス
ReselectableSegmentControl *firstNextSegmentedControl = [[ReselectableSegmentControl alloc] init];
firstNextSegmentedControl.frame = CGRectMake(xCordinate, 255, 188, 50);
firstNextSegmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
firstNextSegmentedControl.tag = index + 1;
[firstNextSegmentedControl addTarget:self action:@selector(firstNextThenSegmentedControlValueChanged:) forControlEvents:UIControlEventValueChanged];
[firstNextSegmentedControl insertSegmentWithImage:[UIImage imageNamed:@"NoTimerCounter.png"] atIndex:0 animated:YES];
[firstNextSegmentedControl insertSegmentWithImage:[UIImage imageNamed:@"Timer.png"] atIndex:1 animated:YES];
[firstNextSegmentedControl insertSegmentWithImage:[UIImage imageNamed:@"Counter.png"] atIndex:2 animated:YES];
firstNextSegmentedControl.selectedSegmentIndex = 0;
[self.view addSubview:firstNextSegmentedControl];
[firstNextSegmentedControl release];
firstNextSegmentedControl = nil;
UISegmentSubClass .h ファイル
#import <Foundation/Foundation.h>
@interface ReselectableSegmentControl : UISegmentedControl {
}
@end
UISegmentSubClass .m ファイル
-(void)setSelectedSegmentIndex:(NSInteger )selectedValue{
if (selectedValue==self.selectedSegmentIndex) {
[self sendActionsForControlEvents:UIControlEventValueChanged];
}
[super setSelectedSegmentIndex:selectedValue];
}
また
-(void)setSelectedSegmentIndex:(NSInteger )selectedValue{
if (self.selectedSegmentIndex == selectedValue) {
//doing my operation if tapped again the selected value.
else {
super.selectedSegmentIndex = selectedValue;
}
}
また
- (void) setSelectedSegmentIndex:(NSInteger)toValue {
if (self.selectedSegmentIndex == toValue) {
[super setSelectedSegmentIndex:UISegmentedControlNoSegment];
} else {
[super setSelectedSegmentIndex:toValue];
}
}
上記の方法はすべて Ipad2 では機能しません。
この問題に関するヘルプをいただければ幸いです。
ありがとう。