gpt4 book ai didi

ios - 解码后如何恢复 UICollectionViewCell 中的绑定(bind)

转载 作者:可可西里 更新时间:2023-11-01 03:18:27 24 4
gpt4 key购买 nike

我有一个 UICollectionViewCell 的子类。单元格在 Storyboard中可视化设计,包含许多组件,这些组件使用 Storyboard绑定(bind)到 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

数据源做通常的事情:

let cell = collectionView.dequeueReusableCellWithReuseIdentifier("InfoCell", forIndexPath:indexPath)
if let c : InfoCollectionViewCell = cell as? InfoCollectionViewCell {
c.setVariousProperties(...)
}

我最初只实现了包含“未实现”断言的解码/编码方法,但很明显框架偶尔会对类进行编码和解码。我在不保存组件的情况下实现了虚拟编码/解码方法,导致在访问组件时出现 nil 值的可预测问题。

看来我要么一个一个地实现UICollectionViewCell子类中的所有控件的编码和解码,要么我必须找到更好的方法。

这似乎是浪费时间,因为我实际上不需要(我不认为)保存组件的内容,因为它们无论如何都将被子类重用:我将覆盖组件内容将从数据源取值。

显然,所有控件都在 Storyboard中定义。我可以在 init 方法中按名称从 Storyboard 中手动获取它们,但这似乎同样乏味,并且使控件和变量的图形链接变得多余。

有没有更好的办法?

我可以只说“恢复连接”或类似的话吗?

编辑:

在发布问题和添加赏金之间的某处,问题不再发生。我现在注意到我的组件的编码方法没有被调用。所以出于某种原因,框架决定序列化我的对象并反序列化它们,但现在不是。因此问题没有发生,我无法提供堆栈跟踪。

可以想象 XCode 的一些更新已经解决了这个问题,或者可能是其他原因。

我显然仍然担心某处潜伏着一些错误。

最佳答案

您不需要为 Storyboard 中布置和连接的任何控件实现编码/解码。这将在运行时处理,您将在 collectionView.dequeueReusableCellWithReuseIdentifier 之后得到一个单元格,只要其他所有内容都已正确连接到准备好使用的 UI 组件。要检查的事情是:

  1. 子类在 Storyboard自定义类部分指定
  2. reuseIdentifier 定义为匹配您期望的字符串
  3. 所有 IBOutlet 都已连接,并且还应在 IBOutlet var 行旁边的代码中显示连接。

一旦你确定这些都是正确的,试着打印出组件来检查它们是否仍然为零,并在其中放置一些简单的文本来消除任何数据源问题:

  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
}
}

关于ios - 解码后如何恢复 UICollectionViewCell 中的绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34754815/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com