1

我有一個UICollection視圖,它實現了「didSelectItemAtIndexPath ...」方法。當單元格被選中(點擊)時,將轉換到另一個視圖控制器。但是,每個單元格還包含一個垂直滾動視圖。我希望用戶可以選擇與每個單元格進行交互,以便垂直滑動以查看滾動視圖的內容,或者點擊一次以選擇單元格。UICollectionViewCell回覆多個手勢識別器

我的第一個想法是在單元格中添加兩個手勢識別器,一個用於滑動,另一個用於點擊,但我不確定是否開始向UICollectionView和scrollview添加更多手勢識別器是一個好主意。我也不確定如何將滑動手勢與滾動視圖的滾動操作綁定。

我覺得這個資源是:http://uncorkedstudios.com/2013/05/03/using-uigesturerecognizers-with-uicollectionviews/,建議使用requireGestureRecognizerToFail。

經過上述兩種方法的攻擊之後,我不覺得更接近於搞清楚如何做到這一點,更重要的是,如何正確地做到這一點。 任何人都可以提出一個明智的策略,讓每個UICollectionViewCell用兩個獨立的動作來回應兩個獨特的手勢嗎?

編輯 我曾嘗試以下辦法來解決這個問題,還是不能讓兩個手勢識別器一起工作:

1)要我收集觀察室(UICollectionViewCell的子類),我添加我在init方法建立一個UITapGestureRecognizer屬性:

self.tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(cellWasTapped:)]; 
self.tap.delegate = self; //this class is a UIGestureRecognizerDelegate 

2)的方法,cellWasTapped

- (void)cellWasTapped:(UITapGestureRecognizer *)sender 
{ 
    NSLog(@"this cell was tapped!"); //temporary 
} 

3)由於滾動視圖網頁視圖滾動視圖,我已經添加了手勢識別代碼在web視圖委託方法的末尾:

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    [self.overlayView removeFromSuperview]; 
    CGSize contentSize = self.webView.scrollView.contentSize; 
    CGSize viewSize = self.webView.bounds.size; 
    float rw = viewSize.width/contentSize.width; 
    self.webView.scrollView.minimumZoomScale = rw; 
    self.webView.scrollView.maximumZoomScale = rw; 
    self.webView.scrollView.zoomScale = rw; 
    self.webView.scrollView.scrollEnabled = YES; 
    self.webView.scrollView.contentOffset = CGPointMake(0, 0); 
    self.webView.scrollView.size = CGSizeMake(self.webView.scrollView.contentSize.width,  
    self.webView.scrollView.contentSize.height - 5); 
    self.webView.scrollView.delegate = self; 

    [self addGestureRecognizer:self.tap]; 
    [self.tap requireGestureRecognizerToFail:self.webView.scrollView.panGestureRecognizer]; 
} 

問題是,敲擊手勢識別器只作品webView內容顯示在Web視圖中之前。內容出現後,只有Web視圖的滾動工作。

+0

你有一些代碼可以顯示嗎?我會添加第二個手勢並使用'requireGestureRecognizerToFail'。 – Wain

+0

我沒有任何代碼 - 我看不到如何開始處理此問題。我知道如何將手勢識別器添加到一般的視圖中,但在這裏我迷路了。假設我向單元格添加輕擊手勢。然後,我使用requireGestureRecognizerToFail,如何訪問滾動視圖的滑動手勢識別器以將其添加爲此方法的參數?我知道如何訪問scrollView.gestureRecognizers,但這沒有幫助。 – jac300

回答

1

此滾動視圖有一個panGestureRecognizer屬性,您可以訪問該屬性以建立與您的新輕敲手勢的requireGestureRecognizerToFail關係。一旦添加新的輕擊手勢,您的所有輕敲處理都將從當前代表方法移開。

您還應該實施gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:以允許您的所有識別器同時運行。

+0

我試過這種方法 - 它看起來應該可以工作,但我無法同時獲得兩個手勢。我編輯了我的問題以顯示我正在使用的代碼。 – jac300

+0

更新的詳細信息 – Wain

+0

這樣做。謝謝! – jac300