カスタムUITableViewCells
(「CustomCell」)のUITableView
を含むアプリ。各CustomCellには、ペン( "CustomView")を介して1つまたは複数のカスタムビューを持つUIStackView
が含まれています。
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(ReuseIdentifierCustomCell, forIndexPath: indexPath) as! CustomCell
configureCell(cell, atIndexPath: indexPath)
return cell
}
問題は、セルが再利用されていたように、細胞は「古い」データが含まれているというものであった:次のように私はCustomCellを再利用します。次のようにこれを修正するために、私はCustomCellでprepareForReuse
メソッドをオーバーライド:
override func prepareForReuse() {
super.prepareForReuse()
for case let view as CustomView in stackView.subviews {
view.removeFromSuperview()
}
}
を次にlayoutSubviews
で、私は後ろにサブビューを追加します。これがあれば
override func layoutSubviews() {
super.layoutSubviews()
if stackView.subviews.isEmpty {
addCustomViewsToCell()
}
}
パフォーマンスは、これまでの罰金だが、好奇心適切なアプローチか、将来的に規模の問題に遭遇するかどうかを判断します。私はこれまでに別の実行可能なアプローチを見つけることができませんでした。
ありがとうございました
セルのサブクラスに 'configureCell'を置くと、MVCに違反します。それはうまくいくが、ベストプラクティスではない。 – Paulw11
提案していただきありがとうございます。 'configureCell'関数は実際にデータ値を設定していましたが、わかりやすくするために' cellForRowAtIndexPath'に移動しました。それは、セルが再利用の準備ができているときに、階層から 'CustomView'を削除せずに、再利用の問題がまだ現れているということです。おそらく私は更新の代わりにサブビューを追加しているからでしょうか?サブビューの数はセル間で変わる可能性があります。 – JKahn