我有一个tableView设置,以便在触摸单元格时,它会在高度上展开以显示更多信息。 tableView有5个部分。
我有一个错误:当一个单元格扩展时,该单元格下面的所有headersCells都不可见。控制台输出以下内容:“[31233:564745]没有重复使用表格单元格的索引路径”
在我的故事板中,我有2个自定义单元格:“myCell”用于数据承载单元格,“headerCell”用于标题。
func tableView(tableView:UITableView,didSelectRowAtIndexPath indexPath:NSIndexPath){
let thisGoal : GoalModel = goalArray[indexPath.section][indexPath.row]
if self.currentPath != nil && self.currentPath == indexPath {
self.currentPath = nil
} else {
self.currentPath = indexPath
}
tableView.beginUpdates()
tableView.endUpdates()
}
如果我在开始/结束更新之间输入tableView.reloadData(),它会正常运行,尽管标题背景变黑,并且会丢失动画。
我拥有声明的头文件的所有内容:func tableView(tableView:UITableView,viewForHeaderInSection section:Int) - >的UIView?
我错过了什么?我真的很喜欢tableView仍然有动画,并保持背景clearColor()。提前致谢。我确实读过目标C答案,但无法让他们为我工作。我非常感谢SWIFT的一些帮助。
我认为问题是表单元格被重用的无索引路径。
答案 0 :(得分:103)
我在控制台输出中找到了答案。在标题函数中使用此代码:
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
请勿返回您的headerCell
或您的可重复使用标识符。返回reuseIdentifier.contentView
。对我而言:return headerCell!.contentView
。
答案 1 :(得分:15)
只是补充一点,我感到困惑的是,为什么我不能引用我的单元格的contentView,当我能够清楚地看到它在那里时,我应该花费更长的时间。我的自定义类(使用UITableViewCell而不是UITableViewHeaderFooterView)每次都会返回致命错误。因此,请确保在UITableViewHeaderFooterView类下设置任何自定义样式,如:
class CustomHeaderCell: UITableViewHeaderFooterView {
您还需要注册resuableIdentifer,如下所示:
tableView.registerNib(UINib(nibName: "HeaderCell", bundle: nil), forHeaderFooterViewReuseIdentifier: "CellHeader")
然后这个坏男孩:
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerCell = tableView.dequeueReusableHeaderFooterViewWithIdentifier("CellHeader") as! CustomHeaderCell!
return headerCell!.contentView
}
答案 2 :(得分:9)
由于我还没有达到50的声誉,我无法评论之前的答案,所以我为将此列为另一个答案而道歉。
返回ContentView会使函数工作,但会删除对reuseIdentifier(headerCell)所做的所有格式化
headerCell.backgroundColor = UIColor.cyanColor()
这不会为headerCell
提供青色要解决此问题,只需将“.contentView”添加到格式化行
即可headerCell.contentView.backgroundColor = UIColor.cyanColor()
答案 3 :(得分:5)
当我将我的应用程序转换为IOS 10时,2个表中的表视图标题消失了 - 我在Apple开发人员API文档中找到了关于表标题的原因。当我添加以下内容时,丢失的标题重新出现!
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
{
return 44 // where 44 is the header cell view height in my storyboard
}
答案 4 :(得分:2)
我有同样的错误,因为我使用dequeue方法而不是UITableViewHeaderFooterView
返回一个单元格。
UITableViewHeaderFooterView
@IBOutlet
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
返回商店不要忘记设置标题大小 不要忘记将插座设置为坚固。
答案 5 :(得分:0)
您可以将tableviewcell包裹在UIView中
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let containerView = UIView()
guard let headerCell = tableView.dequeueReusableCell(withIdentifier: "MyHeaderView") as? MyHeaderView else { fatalError(" Failed to load MyHeaderView") }
containerView.addSubview(headerCell)
return containerView
}