我有一个功能正常的UICollectionView,带有可重复使用的可重复使用的瓷砖,我在XCode中进行了布局。我正在尝试执行拖放操作,我有效地复制了自定义UICollectionViewCell子类的实例,但是在原始UICollectionView之外的视图中使用。对此有一般策略吗?
我添加了init(frame:CGRect)
以便我可以在UICollectionView用例之外创建它,但是后来我没有得到编码器的咒语。是否有一个API可用于获取特定于该reuseIdentifer的编码器并使用它创建一个,而不是通过UICollectionView.deque
API?
(我正在做Swift3 / iOS10)
答案 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
}