2011-05-25 18 views
8

我想要做的是設置一堆UIControl對象來通過相同的處理程序發送所有事件。該處理程序不需要根據觸發的UIControlEvents類型確定適當的操作。如何確定哪個UIControlEvents類型導致UIEvent?

- (void)handleEventFromControl:(id)sender withEvent:(UIEvent *)event { 
    UIControl *control = sender; 
    NSIndexPath *indexPath = [controlIndexPaths objectForKey:control]; 
    UIControlEvents controlEventType = event.type; //PROBLEM HERE 

    BOOL fire = NO; 
    NSNumber *eventCheck = [registeredEventsByToolkitIndex objectAtIndex:indexPath.toolkit]; 
    fire = ([eventCheck integerValue] & controlEventType); 

    if(!fire) { 
     eventCheck = [registeredEventsByControlIndex objectAtIndex:indexPath.control]; 
     fire = ([eventCheck integerValue] & controlEventType); 
    } 

    if(!fire) { 
     eventCheck = [registeredEventsByIndexPath objectForKey:indexPath]; 
     fire = ([eventCheck integerValue] & controlEventType); 
    } 

    if(fire) { 
     [self.delegate toolkit:self indexPath:indexPath firedEvent:event]; 
    } 
} 

盡我所知,event.type不能這樣工作。我想避免使用UIControl的子類,因爲對於我想要做的事來說這是嚴重的過度消耗。其餘的移動部件並不那麼重要。我要的是要檢查UIControlEvents的方式target:action:對在下面的設置中使用後:

- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents 

如果有不同的方式爲target:action:發送回UIControlEvents的設置,我會採取。但是我沒有在文檔中看到它。或者,至少可以訪問UIControl對象的外部以外的,以便我可以獲得我想要的類型。

+1

http://stackoverflow.com/questions/2437875/target-action-uicontrolevents – albertamg 2011-05-25 22:34:07

+0

@albertamg的可能重複:是的,這個問題與這一個完全相同。任何經過的選民,繼續前進,並關閉這一點。 – MrHen 2011-05-25 22:39:27

回答

16

你是對的; UIEvent.type不會這樣工作。在內部,UIControl子類基本上使用sendActionsForControlEvents:方法,這意味着他們可以選擇將他們想要的任何東西作爲參數。

至於如何知道,簡單的答案是每個控制事件都有一個單獨的方法。

相關問題