2009-08-06 91 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

你可以使用一個子類來獲得你想要的行爲。讓UISegmentedControl的子類,有一個BOOL伊娃:

BOOL _actionSent; 

然後,在實施,覆蓋以下兩種方法:

- (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; 
    } 
} 

可能有其他的方法,但這個工作確定爲我。我有興趣瞭解其他方法。

-1

使用UIControlEventValueChanged與UISegmentedControls。

+0

問題是如果值已經改變,那麼顯然用戶還沒有觸及已經選擇的項目。 – spencewah 2009-08-07 05:46:59

+0

同意這不會回答你的問題,但它確實幫助我,所以我給了它一個投票。 – lambmj 2012-01-19 14:28:50

相關問題