UITableView.visibleCells.contains(JDHeaderTableViewCell()) 总是返回 false
Posted
技术标签:
【中文标题】UITableView.visibleCells.contains(JDHeaderTableViewCell()) 总是返回 false【英文标题】:UITableView.visibleCells.contains(JDHeaderTableViewCell()) always return false 【发布时间】:2018-12-28 06:28:00 【问题描述】:当我打印可见单元格时,它会显示两种类型的单元格,见下文po cells
▿ 2 elements
- 0 : <David.JDHeaderTableViewCell: 0x7fc6880e7a00; baseClass = UITableViewCell; frame = (0 0; 375 210); autoresize = W; layer = <CALayer: 0x600000600200>>
▿ 1 : <David.JDContainerTableViewCell: 0x7fc68a810000; baseClass = UITableViewCell; frame = (0 250; 375 792); autoresize = W; layer = <CALayer: 0x600000655540>>
但是当我尝试获取单元格对象时,它返回 false
(lldb) po cells.contains(JDHeaderTableViewCell())
假
我尝试过以下几行:
let indexPath = IndexPath(row: 0, section: 0)
let cell = self.jdTableView.cellForRow(at: indexPath) as! JDHeaderTableViewCell
但我需要先检查,然后再需要特定的单元格。
【问题讨论】:
因为JDHeaderTableViewCell()
会创建一个新的JDHeaderTableViewCell实例
是的,它也一样
【参考方案1】:
contains
方法用于检查对象是否包含在给定的数组中,这里您将创建新对象为JDHeaderTableViewCell()
并检查它是否包含在给定的可见单元格中。当您创建了新的空对象时,很明显它会返回 false。
如果您想从可见单元格中获取JDHeaderTableViewCell
键入的单元格并使用该单元格,请执行以下操作:
let headersCells = tableView.visibleCells?.filter( (cell) -> Bool in
return cell is JDHeaderTableViewCell
)
如果visibleCells
没有JDHeaderTableViewCell
,headerCells
将为零。如果它包含数组将包含所有对象。现在你必须得到你想要的任何索引。
【讨论】:
实际上只需cells.contains(where: $0 is JDHeaderTableViewCell )
,甚至cells.contains $0 is JDHeaderTableViewCell
都可以解决问题以上是关于UITableView.visibleCells.contains(JDHeaderTableViewCell()) 总是返回 false的主要内容,如果未能解决你的问题,请参考以下文章