2017-06-15 92 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