Swift UITableView didSelectRowAtIndexPath错误

时间:2015-03-07 23:07:31

标签: ios swift uitableview didselectrowatindexpath detailtextlabel

我有一个隐藏字幕的UITableView,但设置了当某人选择一个单元格时它显示该单元格的副标题。这样可以正常工作,除非在点击任何单元格以显示其副标题后如果向下滚动,您会发现每12个单元格都有未隐藏的字幕(以及它应该显示的字幕)。这是我在didSelectRowAtIndexPath中使用的代码:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    for cell in tableView.visibleCells() {
        cell.detailTextLabel??.hidden = true
    }

    var cell = tableView.cellForRowAtIndexPath(indexPath)
    cell?.detailTextLabel?.hidden = false


}

我确定这与" .visibleCells()"因为我的iPhone 6 Plus上每12个单元大约是我可见桌子的高度。当我在模拟器中以4s的速度运行它时,每8个单元就会运行一次。但我不确定除了' visibleCells'但它很奇怪,因为它是整个表格 - 一直向下,每12个单元格显示其副标题......

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

UITableView重用其单元格。因此,您单击的行(未隐藏字幕)的行可以用于行的另一行。 解决方案是在UITableViewCell子类中定义prepareForReuse()方法(如果没有子类,则创建子类)并在那里再次隐藏副标题。

答案 1 :(得分:1)

将该dataSource的方法添加到您的控制器。应该工作正常。

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) {
    var identifier = "cellIdentifier"
    var cell = tableView. dequeueReusableCellWithIdentifier(identifier, forIndexPath: indexPath)
    cell.detailTextLabel?.hidden = true

    return cell
}