2016-03-03 21 views
1

這就是我想要的應用程序去。一個人可以在InterfaceBuilder上設計他們想要的東西。在我的代碼中,然後我在界面構建器上將該視圖掛接到UICollectionViewCell。如何將UIView鏈接到UICollectionViewCell?

這樣,他們的自定義創建視圖可以被放置在許多UICollectionViewCells上。

所以基本上我問的是:我如何設置與下列條件UICollectionView細胞:

  1. 編程器將使用Interface Builder爲小區創建視圖(一個UIView)
  2. 程序員不會在界面構建器上使用UICollectionView或UICollectionViewCell。
  3. 程序員只會在界面構建器上創建一個普通的UIView,然後我的代碼將通過代碼將其掛接到UICollectionViewCell中。

我想要做的目標是創建一個程序員可以使用的自定義控件。程序員只需要設計UIView,我的代碼將處理剩下的事情。

有什麼辦法從IB獲取UIView並將其與代碼掛鉤到UICollectionViewCell中?我被卡住了。

到目前爲止,我所看到的功能是這一個,但我不知道如何將視圖鏈接到UICollectionViewCell類。

func registerClass(cellClass: AnyClass?, forCellWithReuseIdentifier identifier: String) 

編輯 - 另一個潛在的解決方案,我在想是

  1. 使用的NSKeyedArchiver,使用戶具有InterfaceBuilder中的視圖的副本。
  2. 保存該副本
  3. 使用NSKeyedUnarchiver

創建副本,但這樣的出路將是緩慢的,我認爲。任何人有什麼好點子?

+0

你可以用xib來做。您必須繼承UIView,然後必須將該視圖作爲集合視圖單元格加載。 –

+0

有趣的問題。我現在想的唯一方法就是創建,添加(使用autolayouts)並在可重用的UICollectionViewCell中移除您的UIView。但是這個解決方案有性能上的缺陷。 – razor28

+0

@BharatModi好的,我對此有1個問題。該解決方案不允許程序員將UIView添加到IB權利? –

回答

1

正如您提到的一些評論者。

  1. 創建一個單獨的XIB文件。
  2. 無論您想要如何設計XIB文件的視圖。
  3. 然後,您可以捕獲迅速您的看法,像這樣:
// Create the custom view 
var customView = NSBundle.mainBundle().loadNibNamed("nameOfYourXib", owner: self,options: [:])[0] as! UIView 
// Add the subview to the cell 
cell.addSubview(customView) 
  • 在你customCollectionViewCell,添加此視圖作爲一個子視圖,和急。
  • 1

    你可以用xib's來做。您必須繼承UIView,然後必須將該視圖作爲集合視圖單元格加載。通過這種方式,您可以像設計不同的視圖一樣進行設計,並且可以使用/加載任何視圖作爲您希望的collectionView單元格。

    還有可能有其他的方法還加載視圖中集,我的嘗試,哪些則是工作是這樣的:

    //Dequeue cell 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) 
    
    //Create instance of view you wish to load as cell 
    let customView =  CustomView(frame:CGRectMake(0, 20, self.view.frame.size.width, 44)) 
    
    //Add the view inside cell 
    cell.addSubview(customView) 
    

    編輯/更新:

    順便說一下,作爲一個額外的問題,故事板上有一個單獨的NIB文件嗎?

    不,這是不可能的,你不能簡單地在故事板上添加一個UIView,你必須首先添加一個UIViewController來加載你的視圖。故事板只不過是xib的集合,不同之處在於你必須有一個UIViewController來保存/加載視圖。