2013-07-17 82 views
5

我已將UILongPressGestureRecognizer附加到收集視圖,其目的是讓用戶將手指放在表格中的某個單元格上,並詢問他們是否要刪除它。在UICollectionView中點擊位置後識別單元格

我遇到的問題是我不能像表格單元格一樣獲取indexPath(使用indexPathForRowAtPoint),是否有等價的?

如果不是我曾經想過爲每個單元添加手勢,但是如何識別哪個手勢(我看不到手勢的「標記」),例如,我可以在選擇器中發送indexPath.item嗎?或者其他一些方法?

回答

15

你在UICollectionView上得到了同樣的結果。按照documentation

indexPathForItemAtPoint:返回的項目在集合視圖的 指定點的索引路徑。

  • (NSIndexPath *)indexPathForItemAtPoint:(CGPoint)point參數point集合視圖座標系中的一個點。返回值 如果在指定點找不到項目 ,則指定點處的項目的索引路徑或無。

討論該方法依賴於通過 相關聯的佈局對象提供,以確定哪些項包含 點的佈局信息。

Availability在iOS 6.0及更高版本可用。宣佈 UICollectionView.h

+0

我試圖ForItem以及和它告訴我,有沒有明顯的界面,並在接近一個UICollectionView整體的UIViewController檢查我發現我試圖在與UIColectionView名稱相同的UIView上執行此操作。我是一個白癡,沒有注意到,也沒有更好地命名......感謝您的支持。 –

+0

這非常有用,謝謝。 – StackRunner

3

請注意,你有時CGPoint在UIViewController中參考系統快到了,只要沒有參與滾動工作。當涉及滾動時,您需要通過添加滾動的偏移量來將點轉換爲可滾動視圖中的實際點。

在這個例子中CGPoint從3DTouch進來包含內部

public func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController?{ 
    let offsetPoint = self.musicCollectionVw.contentOffset 
    let realLocation = CGPoint(x: location.x + offsetPoint.x, y: location.y + offsetPoint.y) 
    if let indexPath = self.musicCollectionVw.indexPathForItem(at: realLocation){ 
     NSLog("Section: \(indexPath.section) Row: \(indexPath.row)") 
    } 
    return nil 
} 
+0

正是我遇到的問題(但使用Xamarin.iOS),這已經解決了這個問題。但是現在,當我使用3D Touch時,當預覽進入視圖時,源單元格的初始輪廓會顯示。因此,爲了更好地闡明這一點,如果我強制觸摸單元格項目,預覽開始進入視圖,但在原始單元格位於偏移量之前的位置開始展開。 – Tahari

+0

只是我以前的評論(我剛剛發佈後發現)的更新,是如果你註冊UICollectionView本身在RegisterForPreviewingWithDelegate,那麼偏移量不再需要了..因此Xamarin.iOS代碼是: ' RegisterForPreviewingWithDelegate(新PhotoPreviewingDelegate(this),this.CollectionView); ' – Tahari

+1

我向上投票,因爲你的回答讓我朝着正確的方向發展,但是對我來說有效的是將'CGPoint'從我的'view'座標轉換爲''collectionView'座標。 '讓actualLocation = view.convert(location,to:collectionView)' –

相關問題