在UICollectionView API之外实例化“绘制”的UICollectionViewCell子类的方法?

时间:2016-12-10 00:50:18

标签: ios uicollectionview uicollectionviewcell

我有一个功能正常的UICollectionView,带有可重复使用的可重复使用的瓷砖,我在XCode中进行了布局。我正在尝试执行拖放操作,我有效地复制了自定义UICollectionViewCell子类的实例,但是在原始UICollectionView之外的视图中使用。对此有一般策略吗?

我添加了init(frame:CGRect)以便我可以在UICollectionView用例之外创建它,但是后来我没有得到编码器的咒语。是否有一个API可用于获取特定于该reuseIdentifer的编码器并使用它创建一个,而不是通过UICollectionView.deque API?

(我正在做Swift3 / iOS10)

1 个答案:

答案 0 :(得分:0)

如果您希望能够在不打扰UICollectionViewCell的情况下创建UICollectionView实例,请在UICollectionViewCell中定义XIB,而不是在故事板中定义。

要在Xcode中执行此操作:

  • 文件 - >新 - >档案 - >用户界面 - >图
  • 将其类设置为NameOfYourCellClass,就像在Storyboard中一样。

要在ViewController中使用它,您必须注册XIB:

override func viewDidLoad() {
    super.viewDidLoad()
   //...        
    self.collectionView.register(UINib(nibName: "nameOfXibFileWithoutExtension", bundle: nil), forCellWithReuseIdentifier: "reuseIdentifier")
}

现在collectionView应该像以前一样工作,但您也可以从项目的任何位置创建单元格的独立版本:

private func instantiateCellFromNib() -> NameOfYourCellClass {
    let bundle = Bundle(for: type(of: self))
    let nib = UINib(nibName: "nameOfXibFileWithoutExtension", bundle: bundle)
    let cell = nib.instantiate(withOwner: self, options: nil)[0] as! NameOfYourCellClass

    return cell
}