2016-08-11 19 views
2

我創建了一個自定義類,它是UICollectionReusableView的子類。它本質上是一個集合視圖的部分標題,我在它上面添加了幾個按鈕。當按下按鈕時,我希望視圖控制器過濾結果(取決於按下哪個按鈕)。設置我的自定義類'代表我的視圖控制器

我需要我的視圖控制器有一個這個自定義類的出口,但沒有工作,因爲Xcode抱怨重複的內容有類(即使我只打算使用一個collectionView節頭)。所以我的下一個選擇是委派。

我的問題是雙重的:

  1. 如何設置我的自定義類授人以視圖控制器?通常我在prepareForSegue中設置委託,但由於我沒有這些,我不知道該怎麼做。我的視圖控制器是在故事板中創建的,我的自定義類沒有引用它。即使在我的視圖控制器中,我也無法訪問集合視圖的節頭以將其委託設置爲自我(我檢查了Apple的文檔,並且沒有屬性可以訪問節標題)。

  2. 當我將IBAction設置爲我的自定義類時,如何確保點按的按鈕也作爲發件人傳入?我已經將其中一個按鈕連接到了一個動作,並且寫了func someAction (sender: AnyObject) {},但是程序如何知道該按鈕本身應該作爲發件人傳入?

這裏是我的代碼:

// Custom Class 
class CollectionHeaderView: UICollectionReusableView { 

    @IBAction func buttonPressed (sender: AnyObject) { 
     **delegate?.didTapButton(self)** 
    } 
    var delegate: UICollectionViewDelegate? 
} 


// Protocol 
protocol CollectionHeaderViewDelegate { 
    func didTapButton(sender: CollectionHeaderView) 
} 

// View Controller (the delegate) 
func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView { 
     let headerView = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "CollectionHeaderView", forIndexPath: indexPath) as! CollectionHeaderView 
     headerView.delegate = self 
     return headerView 
    } 

extension BrowseViewController: CollectionHeaderViewDelegate { 
    func didTapButton(sender: CollectionHeaderView) { 
     print("Delegate's Button Tapped") 

    } 
} 

加粗的部分就是Xcode中給我的錯誤,指出,「類型UICollectionViewDelegate價值沒有成員‘難道輕按按鈕’」 - 不知道爲什麼它指的是UICollectionViewDelegate ..我試着改變變量名稱和調用來點擊委託給headerViewDelegate,但它仍然給出錯誤。

回答

1

如果這個UICollectionReusableView是一個集合視圖的節標題,你可以在代碼中創建它。您需要實施collectionView:viewForSupplementaryElementOfKind:atIndexPath:。在這一點上,你(視圖控制器)正在創建節頭,並且可以以任何你喜歡的方式進行配置。

或者,如果這個UICollectionReusableView是由故事板中的流佈局創建的,那麼將它放入故事板中,並按照正常情況連接它們的操作。

enter image description here

但程序如何知道按鈕本身是假設被傳遞作爲發件人

當按鈕被竊聽以及其控制的事件動作被觸發時,按鈕本身是總是提供作爲參數。這是什麼控制的一部分。

+0

謝謝!這爲我打開了很大的潛力!哈哈。 –

相關問題