2012-07-19 43 views
0

我使用下面的代碼來調用一個函數,當有人點擊一個UITableViewCell中的按鈕。不幸的是,即使觸摸在按鈕區域外被釋放,代碼仍然被調用。 (例如,觸摸按鈕,將手指滑離按鈕並且按鈕仍然動作)。UIButton正確的TouchUp檢測

請問有人可以告訴我爲什麼會發生這種情況,或者正確的做法是什麼?我認爲也許我的問題是「addTarget」子句 - 也許TouchUpInside是指我的UITableView而不是按鈕本身?

[cellPeriod.myButton1 addTarget:self action:@selector(buttonClickedStopWatch:) forControlEvents:UIControlEventTouchUpInside]; 

回答

2

該問題與UITableView沒有任何關係。

我想也許蘋果故意這樣做,因爲我們的手指不是鼠標。你可以檢查由蘋果公司生產的應用程序,它也有問題。你可以看到navigationBar的backItemButton。

如果你想解決這個問題,你可以用UIControl的方法做:

- (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event; 

要檢查此點是否按鈕的矩形內。爲響應

#import "MyButton.h" 

@implementation MyButton 

- (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event 
{ 
    CGPoint location = [touch locationInView:self]; 
    CGRect btnRect = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height); 
    if (CGRectContainsPoint(btnRect, location)) { 
     self.tag=-1; 
     return; 
    } 
    self.tag=-2; 
} 
@end 
+0

感謝:你可以添加一個布爾值來決定是否繼續做選擇

增加。我不完全按照你的建議。我聽到你說的關於使用endTrackingWithTouch方法,而不是..但你怎麼建議選擇器有條件地調用?你能舉個例子嗎?謝謝 – SparkyNZ 2012-07-23 07:59:12

+0

@SparkyNZ 1)你可以使用MyButton:UIButton或UIControl,並使用 - (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)事件;你可以看看我添加的代碼,它可以使用雖然這是非常醜陋的。 2)另一種方法是使用 - (void)touchesEnded:(NSSet *)觸及事件:(UIEvent *)事件;在tableView或tableViewController.view.you可以試試 – cloosen 2012-07-23 11:55:25

+0

非常感謝 - 今晚我會試試這個!它像這樣有用的代碼 - 也可以幫助我更好地瀏覽Apple文檔, – SparkyNZ 2012-07-25 19:51:19