在 UICollectionView 中通过 NIB 添加自定义单元格
Adding custom cell via NIB in UICollecitonView
我有一个非常简单的 swift 程序,它使用在 UICollectionView 中使用 Nib 构建的自定义单元格。
当我 运行 应用程序时,我收到一条错误消息
:Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle:"
我已经查看了所有教程并完全按照它们进行了操作,看起来我不知何故缺少了一个初始化器,但我不知所措。在情节提要编辑器的 CollectionViewController 的主要默认单元格中,我将重用标识符命名为 "Cell",对于 Nib(swift 文件命名为 CustomCollectionViewCell.xib)我将重用标识符命名为 "CustomCell".我在 Xib 中有一个 UIButton 作为操作,如果按下它应该记录成功。
这是主要VC:
class MainCollectionViewController: UICollectionViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Register cell classes
self.collectionView!.registerNib(UINib(nibName: "CustomCell", bundle: nil), forCellWithReuseIdentifier: "Cell")
// Do any additional setup after loading the view.
}
override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of items
return 1
}
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! CustomCollectionViewCell
// Configure the cell
return cell
}
}
这是 CustomCollectionViewCell 代码:
class CustomCollectionViewCell: UICollectionViewCell {
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
@IBAction func testButton(sender: UIButton) {
print("Success!")
}
}
我知道这是一个基本的初学者项目,但我在网上到处都看过,但还是被难住了。任何帮助将不胜感激。
为什么不直接使用原型细胞。将原型单元格的 class 更改为 CustomCollectionViewCell,在该单元格中设置您的 UI。删除:
self.collectionView!.registerNib(UINib(nibName: "CustomCell", bundle: nil), forCellWithReuseIdentifier: "Cell")
在viewDidLoad中删除CustomCollectionViewCell.xib
我有一个非常简单的 swift 程序,它使用在 UICollectionView 中使用 Nib 构建的自定义单元格。
当我 运行 应用程序时,我收到一条错误消息
:Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle:"
我已经查看了所有教程并完全按照它们进行了操作,看起来我不知何故缺少了一个初始化器,但我不知所措。在情节提要编辑器的 CollectionViewController 的主要默认单元格中,我将重用标识符命名为 "Cell",对于 Nib(swift 文件命名为 CustomCollectionViewCell.xib)我将重用标识符命名为 "CustomCell".我在 Xib 中有一个 UIButton 作为操作,如果按下它应该记录成功。
这是主要VC:
class MainCollectionViewController: UICollectionViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Register cell classes
self.collectionView!.registerNib(UINib(nibName: "CustomCell", bundle: nil), forCellWithReuseIdentifier: "Cell")
// Do any additional setup after loading the view.
}
override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of items
return 1
}
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! CustomCollectionViewCell
// Configure the cell
return cell
}
}
这是 CustomCollectionViewCell 代码:
class CustomCollectionViewCell: UICollectionViewCell {
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
@IBAction func testButton(sender: UIButton) {
print("Success!")
}
}
我知道这是一个基本的初学者项目,但我在网上到处都看过,但还是被难住了。任何帮助将不胜感激。
为什么不直接使用原型细胞。将原型单元格的 class 更改为 CustomCollectionViewCell,在该单元格中设置您的 UI。删除:
self.collectionView!.registerNib(UINib(nibName: "CustomCell", bundle: nil), forCellWithReuseIdentifier: "Cell")
在viewDidLoad中删除CustomCollectionViewCell.xib