当选择单元格时,UITableView在滚动时改变外观?

时间:2016-01-23 22:31:03

标签: ios swift uitableview uiscrollview

在选择UITableView单元格并滚动离开(You can see it here)后,我遇到了最奇怪的故障:

当我选择一个单元格时,它被编程为更改其文本并将字体颜色从棕色更改为红色。但是,当我滚动时,我没有选择的其他单元格将其字体颜色更改为红色。当我滚动回所选单元格时,它会恢复为原始文本,有时,它的字体颜色也是(从红色到棕色)。

我已尝试使用this post来修复它。但仍然存在故障。

我完全不知道为什么会这样,如果有人能告诉我原因,我会爱上爱情。

在我的代码中,我创建了ViewController CategoryViewController UITableView的{​​{1}}& Datasource而不是Delegate b / c我在UITableViewController中有其他观点,而不只是CategoryViewController

UITableView

2 个答案:

答案 0 :(得分:2)

您采用的方法不正确,因为在重复使用单元格时,设置颜色。如果未选择单元格,则cellForRowAtIndexPath需要将颜色设置为棕色。如果选择了单元格,则应将其设置为红色:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let subcategoryCell = tableView.dequeueReusableCellWithIdentifier("subCategoryCell", forIndexPath: indexPath) as! SubcategoryTableViewCell
    let subcategory = expensesOrganizer.getSubcategoryFor(category!, index: indexPath.row)
    subcategoryCell.subCategoryLabel.text = "\(indexPath.row) \(expensesOrganizer.getText(subcategory.rawValue))"
    subcategoryCell.selectedBackgroundView = UIView(frame: CGRect.zero)
    subcategoryCell.selectedBackgroundView?.backgroundColor = themeColors.getColorOfCategory(category!)
    if let selected = tableView.indexPathsForSelectedRows() as? [NSIndexPath] && selected! == indexPath {
        subcategoryCell.subCategoryLabel.textColor = UIColor.brownColor()            
    } else {
        subcategoryCell.subCategoryLabel.textColor = UIColor.redColor()
    }
    return subcategoryCell
}

答案 1 :(得分:0)

这与细胞再利用有关。

当你更改didSelectRowAtIndexPath中标签的颜色,然后在屏幕外滚动该单元格时,它会重新用于屏幕上显示的其他单元格。

但是,由于您没有准备要重复使用的单元格,因此它仍然使用所选字体颜色作为标签。

prepareForReusecellForRowAtIndexPath中指定标​​签的默认文字颜色可以解决此问题。