0

我已經設置了我的UICollectionViewCell,其中UIPanGestureRecognizer應該像您在UITableViewCells中經常看到的內容那樣顯示控件。不過,我的問題應該適用於UICollectionViewsUITableViews帶有平移手勢識別器的CollectionViewCell

我有它的工作,使單元格中的水平鍋與UICollectionView的垂直鍋同時工作。這是通過貫徹UIGestureRecognizer此委託方法簡單有效:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 
    return YES; 
} 

這使他們能夠同時工作,但它也有副作用,如我在UICollectionView垂直平移,任何輕微的水平運動將觸發在我開始垂直平移時碰巧碰到的單元格中的gestureRecognizer,從而揭示了底層控件。我不想要這個。

郵件處理這完美,以便FX。 UITableView中的垂直平移可禁用單元格中的任何水平平移手勢,反之亦然。

我可以通過正確設置我的手勢識別器以簡單的方式實現此目的嗎?

我想避免一個解決方案,我必須在視圖之間管理狀態(「滾動視圖正在拖動」,「單元格正在拖動」等)。

回答

2

視頻:「高級滾動視圖和觸摸處理技術」可以在此問題的解決方案中看到。在他們解釋如何使用多點觸摸來滾動時如何實現拖動的部分。這個想法是禁用,然後重新啓用您不想與當前正在工作的手勢並行運行的手勢識別器。在你的情況下,你需要對collectionViewtableView進行子類化,以便override他們實現平移手勢識別器。

+0

確實。我用同樣的會話視頻解決了這個問題。在這裏提供了類似問題的答案:http://stackoverflow.com/questions/14298650/uicollectionviewcell-with-uiscrollview-cancels-didselectitematindexpath/24853578#24853578 –

0

第一:

我有工作,所以,在細胞水平泛用的CollectionView的垂直掃視同時工作。這是通過實現UIGestureRecognizer的這種委託方法實現的。

後來:

郵件處理這種完美,使FX。在TableView中的垂直平移,禁用單元格中的任何水平平移手勢,反之亦然。

你在問兩個相反的行爲。決定你希望你的應用實現哪一個。

如果您希望手勢同時工作(壞設計IMO),請將gestureRecognizer: shouldRecognizeSimultaneouslyWithGestureRecognizer:保存在您的代碼中。

如果您希望它們像在郵件應用程序中那樣工作(它們通常在表格視圖中執行的方式),請刪除違規的代碼行。

此外,在表格視圖中實現的方式是使用滾動視圖。所以你可能想看看。

+0

如果我刪除委託調用(或實際返回NO),滾動視圖識別器被完全鎖定,以至於沒有解決任何問題。在單元格中使用滾動視圖來實現它可能是一個選項,但我仍然有衝突的手勢識別器。 –

+0

這似乎是一個滾動視圖的方式去代替手勢識別器。它解決了手勢識別器的衝突問題,但也帶來了一些其他問題。他們似乎可以修復。 –