UISegmentedControlを継承したサブクラスをつくれば、UISegmentedControlのクリックを検知できます。次の例では、同じインデックスが選択された場合は、TouchDownイベントが発生するようにしてあります。
ClickableSegmentedControl.h
#import@interface ClickableSegmentedControl : UISegmentedControl @end
ClickableSegmentedControl.m
#import "ClickableSegmentedControl.h" @implementation ClickableSegmentedControl - (void)setSelectedSegmentIndex:(NSInteger)selectedSegmentIndex { BOOL isSameIndex = (selectedSegmentIndex == self.selectedSegmentIndex); [super setSelectedSegmentIndex:selectedSegmentIndex]; if (isSameIndex) { [self sendActionsForControlEvents:UIControlEventTouchDown]; } } @end
しかし、このやり方では、iOS4ではクリックを検知できても、iOS5ではムリでした。iOS4とiOS5のどちらにも対応するには、touchesEnded:withEvent:をオーバーライドすればいいようです。次の例では、TouchUpInsideイベントを発生させています。注意しなければいけないのは、これだとインデックスが変更されたどうかにかかわらずイベントが発生してしまう点です。touchesEnded:withEvent: は、ValueChangedイベントの後で呼ばれるようなので、この点を考慮して適切にハンドリングする必要があります。
ClickableSegmentedControl.m
#import "ClickableSegmentedControl.h" @implementation ClickableSegmentedControl - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { [super touchesEnded:touches withEvent:event]; [self sendActionsForControlEvents:UIControlEventTouchUpInside]; } @end
0 件のコメント:
コメントを投稿