在选择UITableView单元格并滚动离开(You can see it here)后,我遇到了最奇怪的故障:
当我选择一个单元格时,它被编程为更改其文本并将字体颜色从棕色更改为红色。但是,当我滚动时,我没有选择的其他单元格将其字体颜色更改为红色。当我滚动回所选单元格时,它会恢复为原始文本,有时,它的字体颜色也是(从红色到棕色)。
我已尝试使用this post来修复它。但仍然存在故障。
我完全不知道为什么会这样,如果有人能告诉我原因,我会爱上爱情。
在我的代码中,我创建了ViewController CategoryViewController
UITableView
的{{1}}& Datasource
而不是Delegate
b / c我在UITableViewController
中有其他观点,而不只是CategoryViewController
UITableView
答案 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
中标签的颜色,然后在屏幕外滚动该单元格时,它会重新用于屏幕上显示的其他单元格。
但是,由于您没有准备要重复使用的单元格,因此它仍然使用所选字体颜色作为标签。
在prepareForReuse
或cellForRowAtIndexPath
中指定标签的默认文字颜色可以解决此问题。