swift 致命错误中的自定义 CollectionViewCell
custom CollectionViewCell in swift fatal error
我在做一个基于 xib 的 swift 项目,我在我的视图控制器中创建了一个集合视图,添加了它的委托,使用默认的 collectionViewCell
一切都很好
问题出在我创建自定义单元格时
我在 xib
中以正确的方式添加了重用标识符
然后在视图控制器的加载中添加这些行
collectionViewCarType.delegate = self;
collectionViewCarType.dataSource = self;
collectionViewCarType.registerClass(MainScreenCollectionViewCell.self, forCellWithReuseIdentifier: "MainScreenCollectionViewCell");
并且我添加了断点它不会在这里崩溃
然后在:
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
我添加了这些行:
var cell = collectionView.dequeueReusableCellWithReuseIdentifier("MainScreenCollectionViewCell", forIndexPath: indexPath) as! MainScreenCollectionViewCell
cell.backgroundColor = UIColor.redColor()
cell.labelOfTime.text = "10 mins"
cell.labelOfType.text = "Mini"
return cell
应用程序在达到 cell.labelOfTime.text
时崩溃
当我删除标签 2 行时,它可以很好地为单元格着色
我还使 2 标签和集合视图变得强大,但它也崩溃了
我删除了 xib 并用不同的名称创建它并尝试使用它,但我也遇到了同样的错误
我是 swift 的新手,我不知道我还能做些什么
您的问题是您创建了一个 .xib
,但您正在注册一个 class:
let nib = UINib(nibName: view, bundle: nil)
collectionViewCarType.registerNib(nib, forCellWithReuseIdentifier: "MainScreenCollectionViewCell")
这意味着当它加载您的 class 时,它只是被初始化,它不会从 .xib
加载它,所以您的插座永远不会被设置。
您可以在 StoryBoard 中做很多这样的事情,也许它会有所帮助。
首先,您可以通过 storyBoard 连接委托和数据源 - 只需从集合视图中按住 ctrl 键拖动,这样您就不需要自己编写(但这不是这里的问题)。
第二件事是你不需要创建 nib 文件,也不需要注册单元格的 class。
- 添加新的 class 文件 - 自定义 UICollectionViewCell class - 应如下所示:
class customCell :UICollection {//implementation goes here}
将 collectionViewCell
拖到您的 collectionView
。
在自定义 class 部分的身份检查器中,将单元格的 class 更改为您刚刚创建的 class 的名称。
在属性检查器中添加标识符
将您想要的任何内容添加到单元格(图像、标签等)并将它们连接到您创建的 class。
它会让事情变得更容易,无论如何这里有一些参考资料可能会有所帮助。
http://www.ioscreator.com/tutorials/custom-collection-view-cell-tutorial-ios8-swift
http://www.raywenderlich.com/78550/beginning-ios-collection-views-swift-part-1
我在做一个基于 xib 的 swift 项目,我在我的视图控制器中创建了一个集合视图,添加了它的委托,使用默认的 collectionViewCell
一切都很好问题出在我创建自定义单元格时 我在 xib
中以正确的方式添加了重用标识符然后在视图控制器的加载中添加这些行
collectionViewCarType.delegate = self;
collectionViewCarType.dataSource = self;
collectionViewCarType.registerClass(MainScreenCollectionViewCell.self, forCellWithReuseIdentifier: "MainScreenCollectionViewCell");
并且我添加了断点它不会在这里崩溃
然后在:
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
我添加了这些行:
var cell = collectionView.dequeueReusableCellWithReuseIdentifier("MainScreenCollectionViewCell", forIndexPath: indexPath) as! MainScreenCollectionViewCell
cell.backgroundColor = UIColor.redColor()
cell.labelOfTime.text = "10 mins"
cell.labelOfType.text = "Mini"
return cell
应用程序在达到 cell.labelOfTime.text
时崩溃
当我删除标签 2 行时,它可以很好地为单元格着色
我还使 2 标签和集合视图变得强大,但它也崩溃了
我删除了 xib 并用不同的名称创建它并尝试使用它,但我也遇到了同样的错误
我是 swift 的新手,我不知道我还能做些什么
您的问题是您创建了一个 .xib
,但您正在注册一个 class:
let nib = UINib(nibName: view, bundle: nil)
collectionViewCarType.registerNib(nib, forCellWithReuseIdentifier: "MainScreenCollectionViewCell")
这意味着当它加载您的 class 时,它只是被初始化,它不会从 .xib
加载它,所以您的插座永远不会被设置。
您可以在 StoryBoard 中做很多这样的事情,也许它会有所帮助。 首先,您可以通过 storyBoard 连接委托和数据源 - 只需从集合视图中按住 ctrl 键拖动,这样您就不需要自己编写(但这不是这里的问题)。
第二件事是你不需要创建 nib 文件,也不需要注册单元格的 class。
- 添加新的 class 文件 - 自定义 UICollectionViewCell class - 应如下所示:
class customCell :UICollection {//implementation goes here}
将
collectionViewCell
拖到您的collectionView
。在自定义 class 部分的身份检查器中,将单元格的 class 更改为您刚刚创建的 class 的名称。
在属性检查器中添加标识符
将您想要的任何内容添加到单元格(图像、标签等)并将它们连接到您创建的 class。
它会让事情变得更容易,无论如何这里有一些参考资料可能会有所帮助。
http://www.ioscreator.com/tutorials/custom-collection-view-cell-tutorial-ios8-swift http://www.raywenderlich.com/78550/beginning-ios-collection-views-swift-part-1