rgh*_*ome 8 encoding reuseidentifier ios uicollectionview uicollectionviewcell
我有一个子类UICollectionViewCell.在故事板中可视化地设计单元格,其中包含许多组件,这些组件使用故事板绑定到Swift子类中的变量.
Swift类只提供用于从数据源检索的数据中填充组件的逻辑.
例如:
class InfoCollectionViewCell : UICollectionViewCell {
@IBOutlet weak var mainPanel : UIView!
@IBOutlet weak var panel1 : UIView!
@IBOutlet weak var firstName : UILabel!
@IBOutlet weak var lastName : UILabel!
@IBOutlet weak var address : UILabel!
etc ...
func setVariousProperties(etc) {
firstName.text = ... etc
Run Code Online (Sandbox Code Playgroud)
数据源通常是这样的:
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("InfoCell", forIndexPath:indexPath)
if let c : InfoCollectionViewCell = cell as? InfoCollectionViewCell {
c.setVariousProperties(...)
}
Run Code Online (Sandbox Code Playgroud)
我最初只实现了包含"未实现"断言的解码/编码方法,但很明显,框架偶尔会对类进行编码和解码.我实现了虚拟编码/解码方法,而没有保存组件,在访问组件时导致nil值出现可预测的问题.
所以看来我需要UICollectionViewCell逐个实现子类中所有控件的编码和解码,或者我必须找到更好的方法.
这似乎是浪费时间,因为我实际上并不需要(我不认为)保存组件的内容,因为它们只是为了子类的重复使用:我将覆盖组件内容将来自数据源的值.
显然,所有控件都在故事板中定义.我可以通过init方法中的storyboard手动从名称中获取它们,但这似乎同样繁琐,并使控件和变量的图形链接变得多余.
有没有更好的办法?
我可以只说"恢复连接"或类似的东西吗?
编辑:
在发布问题和添加赏金之间的某个地方,问题停止发生.我现在注意到我的组件的编码方法没有被调用.因此,由于某种原因,框架决定序列化我的对象并对它们进行反序列化,但现在却没有.因此问题没有发生,我无法提供堆栈跟踪.
可以想象,对XCode的一些更新已经解决了这个问题,或者它可能是其他问题.
我显然仍然担心某处潜伏着一些错误.
您不需要为 Storyboard 中布置和连接的任何控件实现编码/解码。这将在运行时处理,只要collectionView.dequeueReusableCellWithReuseIdentifier其他所有内容都正确连接到可供使用的 UI 组件,您就会收到一个单元格。要检查的事项是:
一旦确保这些正确,请尝试打印出组件以检查它们是否仍然为零,并在其中放置一些简单的文本以消除任何数据源问题:
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("InfoCell", forIndexPath:indexPath)
if let c = cell as? InfoCollectionViewCell{
print(c.address)
print(c.firstName)
print(c.lastName)
c.firstName.text = "firstName Test"
c.lastName.text = "lastName Test"
c.address.text = "address Test"
}
return cell
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
175 次 |
| 最近记录: |