2012-06-20 32 views
1

換句話說:我有一個按鈕有兩個事件,如何在回調函數setRedPos中捕獲UIControlEventTouchDownUIControlEventTouchUpInside如何將多個值傳遞給UIButton的@selector()?

[btnRedPos addTarget:self action:@selector(setRedPos:) forControlEvents:UIControlEventTouchDown];// I want to pass in a value of 0 
[btnRedPos addTarget:self action:@selector(setRedPos:) forControlEvents:UIControlEventTouchUpInside];// I want to pass in a value of 1 

...

- (void) setRedPos:(UIButton*)btn 
{ 

} 
+1

[將參數傳遞給addTarget:action:forControlEvents](http://stackoverflow.com/questions/3988485/passing-parameters-to-addtargetactionforcontrolevents) – cHao

回答

4

您不能通過目標/動作傳遞任意參數。第一個參數是發件人,第二個參數(如果你這樣設置)是事件。您可以使用事件告訴什麼樣的事件觸發它,就像這樣:

[btnRedPos addTarget:self action:@selector(setRedPos:forEvent:) 
    forControlEvents:UIControlEventTouchDown]; 
[btnRedPos addTarget:self action:@selector(setRedPos:forEvent:) 
    forControlEvents:UIControlEventTouchUpInside]; 


- (void) setRedPos:(id)sender forEvent:(UIEvent*)event 
{ 
    UITouch* aTouch = [[event allTouches] anyObject]; 
    if(aTouch.phase == UITouchPhaseBegan) { 
     NSLog(@"touch began"); 
    } 
    else if(aTouch.phase == UITouchPhaseEnded) { 
     NSLog(@"touch ended"); 
    } 
} 
1

使用兩個獨立的選擇。

- (void)setRedPosDown:(UIButton *)button { 
    [self setRedPos:button state:0]; 
} 
- (void)setRedPosUp:(UIButton *)button { 
    [self setRedPos:button state:1]; 
} 

[btnRedPos addTarget:self action:@selector(setRedPosDown:) forControlEvents:UIControlEventTouchDown]; 
[btnRedPos addTarget:self action:@selector(setRedPosUp:) forControlEvents:UIControlEventTouchUpInside]; 
+0

我添加了更多信息 – jdl

0

只有兩個方法,我知道要實現在一個方法是: 1)zpasternack介紹 2)使用兩個方法單獨的按鈕一個用於觸摸下來並測試發送者。

對於您的情況,第一種方法更好,因爲它只有一個按鈕對象。 如果您正在尋找一種實現不同按鈕操作的方法,第二種方法會很有用。

儘量貼近物理表示。一個按鈕,但兩個不同的動作?代碼只有一個按鈕並測試操作。