使用 Swift 的 UICollectionView 错误
Posted
技术标签:
【中文标题】使用 Swift 的 UICollectionView 错误【英文标题】:UICollectionView error using Swift 【发布时间】:2014-06-12 07:58:17 【问题描述】:我收到此错误,尝试在 Swift 中使用 UICollectionView:
NSInternalInconsistencyException', reason: 'attempt to register a cell class which is not a subclass of UICollectionViewCell ((null))
但我想我正在注册单元格:
ViewDidLoad:
override func viewDidLoad()
super.viewDidLoad()
self.collectionView.registerClass(NSClassFromString("CollectionCell"),forCellWithReuseIdentifier:"CELL")
cellForItemAtIndexPath:
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath:NSIndexPath)->UICollectionViewCell
var cell = collectionView.dequeueReusableCellWithReuseIdentifier("CELL", forIndexPath: indexPath) as CollectionCell
cell.titleLabel.text="cellText"
return cell
和细胞类:
class CollectionCell: UICollectionViewCell
@IBOutlet var titleLabel : UILabel
init(coder aDecoder: NSCoder!)
super.init(coder: aDecoder)
任何帮助表示赞赏
【问题讨论】:
【参考方案1】:您需要以 Swift 风格将 UICollectionViewCell 的子类传递给 registerClass:
self.collectionView.registerClass(CollectionCell.self, forCellWithReuseIdentifier:"CELL")
【讨论】:
谢谢!进展,现在我得到一个“使用未实现的初始化程序'init(frame :)”,但我到了那里! 这解决了.. init(frame: CGRect) super.init(frame: frame) 再次感谢。【参考方案2】:如果您没有使用任何自定义类,只需在 ViewDidLoad 中使用
myCollectionView!.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "Cell")
【讨论】:
【参考方案3】:myCollectionView!.registerClass(UICollectionViewCell.classForCoder(), forCellWithReuseIdentifier: "cellID")
是推荐的代码。为我工作。希望对您有所帮助。
【讨论】:
【参考方案4】:对于您的细胞:
class CollectionCell: UICollectionViewCell
@IBOutlet var titleLabel : UILabel
init(coder aDecoder: NSCoder!)
super.init(coder: aDecoder)
对于您的 ViewController:
import UIKit
class NextViewController: UIViewController
@IBOutlet var collectionView : UICollectionView
var ListArray=NSMutableArray()
override func viewDidLoad()
super.viewDidLoad()
var nipName=UINib(nibName: "GalleryCell", bundle:nil)
collectionView.registerNib(nipName, forCellWithReuseIdentifier: "CELL")
for i in 0..70
ListArray .addObject("C: \(i)")
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section:Int)->Int
return ListArray.count
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath:NSIndexPath)->UICollectionViewCell
var cell = collectionView.dequeueReusableCellWithReuseIdentifier("CELL", forIndexPath: indexPath) as GalleryCell
cell.titleLabel.text="\(ListArray.objectAtIndex(indexPath.item))"
return cell
func collectionView(collectionView : UICollectionView,layout collectionViewLayout:UICollectionViewLayout,sizeForItemAtIndexPath indexPath:NSIndexPath) -> CGSize
return CGSizeMake(66, 58)
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
【讨论】:
谢谢,但我更喜欢使用 registerClass 而不是 registerNib。 但是下次我会保留这个.. +1【参考方案5】:试试这个:
self.collectionView.registerClass(CollectionViewCell.self,forCellWithReuseIdentifier:"CELL")
【讨论】:
感谢您的回答。按照您的建议进行更改会导致以下控制台输出: 0x1001bffeb: leaq 0x16067(%rip), %rax ; “Swift 动态转换失败” 0x1001bfff2: movq %rax, 0x77c67(%rip) ; gCRAnnotations + 8 0x1001bfff9: int3 0x1001bfffa: nopw (%rax,%rax)以上是关于使用 Swift 的 UICollectionView 错误的主要内容,如果未能解决你的问题,请参考以下文章
ios 8.1:类型“ViewController”不符合协议“UICollectionViewDataSource”
使用 UICollectionViewFlowLayout 时在 UICollectionViewCell 的边界之外绘制
无法从 UIViewController 导航到 UICollectionViewController