2017-06-15 48 views
0

我有一個自定義的UICollectionViewCell,我想在UICollectionView的cellForItemAt方法中加載,但沒有從集合視圖的dequeueReusableCell方法獲取/實例化單元。從nib加載UICollectionViewCell無需重用

我現在遇到的問題是,明明加載像細胞:

let cell = MyCustomCell() 

它IB性質不加載,我試過還呼籲:

cell.awakeFromNib() and/or layoutIfNeeded() 

沒有影響。我可以使用出列方法從IB加載視圖,但如前所述,無法使用它。

我正確地註冊在視圖控制器的viewDidLoad中筆尖其中收集視圖生活:

let name = String(describing: MyCustomCell.self) 
collectionView.register(
    UINib(
     name: name, 
     bundle: nil), 
    forCellWithReuseIdentifier: "customCell") 

回答

5

爲什麼IBOutlets是不是在你的MyCustomCell的情況下工作的原因是因爲只有類被實例化和不是xib/nib。 當你在一個tableView中註冊一個單元格,然後將這個單元格出列時,它們都被初始化了,這就是魔術發生的地方。

如果你真的想負荷的小區中不使用的tableview此的出列方法是你可以做什麼:

  1. 創建你的UITableViewCell的自定義類的一個變種,在這種情況下是MyCustomCell

    var notReusableCell:CellTableViewCell? 
    
  2. In viewDid在這種情況下,您需要添加筆尖並獲取所需的視圖,以便將該單元格作爲第一個視圖。

    在cellForRowAt方法

    let nib = Bundle.main.loadNibNamed("CellTableViewCell", owner: self, options: nil) notReusableCell = nib?.first as! CellTableViewCell?

  3. 現在是否已通過存儲在您的VAR細胞

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { guard let cell = notReusableCell else { return CellTableViewCell() } return cell }

請修改你正在嘗試做的,因爲這樣的做法並不常見。

+0

你100%的權利 - 而是我只是使用了幾個不同的單元格不同的重用標識符,並作爲正常出隊,如果你想更新你的答案,以表明我很樂意接受它。 –

+0

這很好,你得到正確的做法!我認爲我的回覆回答了帖子的問題,所以如果你接受它,我會非常開心:) – Jonathanff