有时会在UITableViewCell中显示一个意外的颜色框。
以下方法最终由tableView调用:cellForRowAtIndexPath:
func indicateAsDoneCell(cell: ButtDTaskListTableViewCell) {
if let itemName = cell.item?.name {
var attrs = [NSStrikethroughStyleAttributeName : 1]
cell.textLabel?.attributedText = NSMutableAttributedString(string:"\(itemName)", attributes: attrs)
cell.contentView.alpha = 0.5
cell.backgroundColor = self.allTasksAreDone() ? UIColor.yellowColor() : UIColor.darkGrayColor()
}
}
在Interface Builder中,单元格和内容视图的剪辑子视图都打开。它是一个基本风格的单元格。它发生在iOS 7和iOS 8中。
可能相关的是,在选中时,已完成的项目会移动/动画到底部。
当我从屏幕上滚出意外的浅灰色框并将其向后滚动到屏幕上时,我仍然看到意外的浅灰色框。
如果我注释掉设置单元格背景的行,我有时会得到这个。
对于某些完成项目/单元格中出现的浅灰色框出现的情况有什么想法?
要求的附加代码。
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell : ButtDTaskListTableViewCell = tableView.dequeueReusableCellWithIdentifier("TaskCell", forIndexPath:indexPath) as ButtDTaskListTableViewCell;
cell.textLabel?.textColor = UIColor.whiteColor()
let sortedByDoneStatus = !tableView.editing // self.sortByDoneStatus
let item : ButtDTaskItem = taskManager.objectInListAtIndex(indexPath.row, sortedByDoneStatus:sortedByDoneStatus)
cell.item = item
indicateDoneStatusOnCell(cell, inEditMode:tableView.editing) // !tableView.editing
return cell;
}
func indicateDoneStatusOnCell(cell : ButtDTaskListTableViewCell, inEditMode:Bool) {
if let existingItem = cell.item? {
if (!inEditMode && existingItem.isDone) {
indicateAsDoneCell(cell)
} else {
indicateAsNotDoneCell(cell)
}
}
}
答案 0 :(得分:0)
我通过在Interface Builder中设置以下内容来取消该框:
数据源不再设置背景颜色,也不会更改alpha。 willDisplayCell方法在单元格上设置适当的backgroundColor。