2013-06-18 30 views
1

我一直在試圖讓我的UICollectionView對單擊和雙擊有不同的響應,但是我發現的所有答案似乎都表明這並不是真的可行,因爲單擊會首先被識別。它工作在真正慢點擊,但任何更快總是啓動默認的手勢識別器(如果有人有這個工作,我很想知道)...UICollectionViewCells和按鈕

因此無論如何,我現在已經訴諸把按鈕放在我的UICollectionViewCell (它有它自己的類和NIB文件)。

問題是這樣的:

什麼考慮利用在的CollectionView的UIViewController按鈕的最好方法?

我現在有在我的UICollectionViewCell子類的報頭中的協議已宣佈我的viewController作爲代表並實現所需的協議的功能。

collectionView:cellForItemAtIndexPath:我將VC設置爲單元的委託。

這一切都有效,但似乎有點冗長,也許不是一個很好的做法。

我想的另一種方式是使用代表只需撥addTarget:Action:UICollectionViewCellcollectionView:cellForItemAtIndexPath:的屬性。

這看起來更簡單,但委託模式看起來更適合我。

任何和所有的建議,哪些會更好,爲什麼,以及任何更合適的替代品歡迎!

謝謝。

回答

2

您正在使用委託模式進行正確的思考。視圖任何操作的最終責任對象是顯示這些視圖的viewController。因此,使用它作爲你的單元協議的代表是正確的。

+0

Gianluca,謝謝。我在這個方法之間被撕裂,只是將操作添加到'collectionView:cellForItemAtIndexPath:'中的按鈕。任何想法會更好......或爲什麼? – Bertie

+0

您可以將按鈕的操作放在viewController的代碼中,但這會是糟糕的面向對象的代碼。你的viewController不需要知道動作是如何被觸發的:它可能是一個按鈕,一個手勢識別器,以及一個從其他對象到單元本身的API調用。沒關係。您的viewController應該只關心處理單元格告訴他發生的操作。所以,這只是良好的面向對象的實踐,並使您的代碼更加可重用。 –

+0

謝謝,當你這樣說時,它是如此明顯。 – Bertie

-1

創建UICollectionViewCell的自定義子視圖,並將您的按鈕置於initWithFrame方法中。聲明按鈕是公開的,以便稍後在您的uicollectionviewcontrolleruicollectionview中以編程方式創建時使用它。

+0

Meenakshi,感謝您的快速回答,但它對我沒有意義...並不意味着你錯了,我只是不明白。 – Bertie