2012-02-19 52 views
0

我有一個UITableView和UINavigationController,我想區分兩次點擊:1)正常點擊選擇一行2)點擊發生在屏幕上其他任何地方(除按鈕上UINavigationController)。我寫了這段代碼:UITableView單擊

singleTap = [[UITapGestureRecognizer alloc] 
            initWithTarget:self action:@selector(singleTapHandler:)]; 
singleTap.numberOfTapsRequired = 1; 

但是,這個問題是它覆蓋了選擇一行的正常點擊。

+0

目前還不清楚「屏幕上的其他地方」是什麼意思。桌面視圖是否佔據導航欄下方的整個屏幕?你的意思是你想要觸摸一個表格視圖行來選擇行和觸發你的敲擊識別器? – 2012-02-19 07:17:18

+0

表格視圖佔據導航欄下方的整個屏幕。我只想觸摸表格視圖行來選擇行。其他地方的觸摸應該只觸發水龍頭識別器。並且按下導航欄上的按鈕應該只觸發按鈕推送處理程序。這更清楚嗎? – user1120008 2012-02-19 07:22:02

+0

這聽起來像是您想要識別輕擊的屏幕的唯一部分位於按鈕外部的導航欄中。正確? – 2012-02-19 07:27:59

回答

1

我假設你將自來水識別器放在UIWindow本身或窗口的唯一子視圖上。您需要爲輕拍識別器提供一個委託,並且該委派需要實施gestureRecognizer:shouldReceiveTouch:

在該方法中,如果觸摸位於按鈕中,或者觸摸位於表格視圖單元格中,則要返回NO,否則返回YES。您需要沿着視圖層次結構走,從觸摸着陸的視圖開始,尋找這兩個類中的任何一個。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    for (UIView *view = touch.view; view; view = view.superview) { 
     if ([view isKindOfClass:[UIButton class]]) 
      return NO; 
     if ([view isKindOfClass:[UITableViewCell class]]) 
      return NO; 
    } 
    return YES; 
} 
相關問題