2013-07-03 31 views
1

我有一個按鈕,我希望它的Touch Up Inside和Touch Up Outside操作都適用於所有相同的方法。那麼我想方法理清哪個事件發生了,這樣的事情:可能檢測按鈕發件人是否來自觸摸內部與觸摸外部?

- (IBAction)buttonMethod:(UIButton *)sender forEvent:(UIEvent *)event { 
if (event == UIControlEventTouchUpInside) 
    NSLog(@"Touch up inside!"); 

if (event == UIControlEventTouchUpOutside) 
    NSLog(@"Touch up outside!"); 
} 
} 

這似乎並沒有工作,因爲觸摸事件似乎從UIControl這是不是在同一個宇宙中的UIEvent繼承。有什麼方法可以告訴我的方法哪個動作導致了該方法被調用?

+0

爲什麼你需要在內部修改並修改外部連接到相同動作的方法? – ppilone

+0

那麼你爲什麼不用兩種方法將它分開。 – Mrunal

+0

因爲這兩種方法幾乎完全相同,除了Touch Up Outside會做更多的事情。如果可以檢測哪種類型的操作稱爲方法,那麼我更願意這樣做,並減少一個方法和更少的代碼。 – robertfiorentino

回答

4

將它分成兩種方法,如果由於某種原因,您希望您的邏輯只在一個消息中傳遞。

- (IBAction)buttonMethod:(UIButton *)sender forEvent:(UIEvent *)event controlEvent:(UIControlEvents)event { 
    if (event == UIControlEventTouchUpInside) 
     NSLog(@"Touch up inside!"); 

    if (event == UIControlEventTouchUpOutside) 
     NSLog(@"Touch up outside!"); 
} 

- (IBAction)buttonUpInside:(UIButton *)sender forEvent:(UIEvent *)event { 
    [self buttonMethod:sender forEvent:event controlEvent:UIControlTouchUpInside]; 
} 

- (IBAction)buttonUpOutside:(UIButton *)sender forEvent:(UIEvent *)event { 
    [self buttonMethod:sender forEvent:event controlEvent:UIControlTouchUpOutside]; 
} 
+1

整點是我想避免添加無關的方法和代碼,如果我不必。我知道我可以有不同的方法,但我試圖避免它。如果不可能檢測到按鈕事件的類型,那麼我只會關閉這個問題。 – robertfiorentino

+0

然後你運氣不好。有(故意)無法從操作方法獲取事件的類型。 –

+0

警告:重新定義方法參數「事件」。錯誤:額外的大括號('}')。 – Pang