2009-08-06 9 views
2

私はUISegmentedControlを持っています。これは、すでに選択されている項目をクリックすると、特定のアクションを実行するために使いたいものです。UISegmentedControlのUIControlEventTouchUpInsideをオーバーライドできますか?

- (void)viewDidLoad { 
    UISegmentedControl * testButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"one", @"two", nil]]; 
    [self.view addSubview:testButton]; 
    [testButton addTarget:self action:@selector(clicked:) forControlEvents:UIControlEventTouchUpInside]; 
    [super viewDidLoad]; 
} 

-(void) clicked: (id) sender{ 
    NSLog(@"click"); 
} 

(そしてclicked:に、私はちょうど新しい選択されたインデックスをクリックする前に、古い選択されたインデックスと異なっているかどうかを確認するために、いくつかのチェックを行うだろう)

私の考え方は基本的にはこのようなものです

問題は、TouchUpInsideコントロールイベントのアクションをオーバーライドするように見えないことです。どんな助けにも感謝!

-S

答えて

5

サブクラスを使用して、必要な動作を取得できます。 1つのBOOLのIVARありUISegmentedControlのサブクラスでください:

BOOL _actionSent; 

その後に、実装では、以下の2個のメソッドをオーバーライドします。

- (void)sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event { 
    [super sendAction:action to:target forEvent:event]; 
    _actionSent = TRUE; 
} 

- (void) setSelectedSegmentIndex:(NSInteger)toValue { 
    _actionSent = FALSE; 

    [super setSelectedSegmentIndex:toValue]; 

    if (!_actionSent) { 
     [self sendActionsForControlEvents:UIControlEventValueChanged]; 
     _actionSent = TRUE; 
    } 
} 

あり、おそらく他の方法がありますが、これは私のために[OK]を働きました。私は他のアプローチを学ぶことに興味があります。

-1

UISegmentedControlsで使用UIControlEventValueChanged。

+0

問題は、値が変更された場合、ユーザーが既に選択されているアイテムに触れていないことです。 – spencewah

+0

これはあなたの質問に答えることはできないと同意しますが、それは助けになりました。 – lambmj

関連する問題