免责声明:我在iOS 8上,所以这可能是个错误。
我正在尝试以编程方式在特定事件之后编辑UITableView中特定IndexPath的单元格的backgroundColor。我使用以下代码:
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
cell.backgroundColor = [UIColor colorWithRed:1 green:0.84 blue:0 alpha:1];
虽然效果很好,但只要滚动,我就会看到其他单元格的背景颜色发生了变化。我认为它与我的- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
方法中的以下代码有关:
static NSString *simpleTableIdentifier = @"SimpleTableCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
...
我怀疑因为所有细胞都是用这个标识符生成的,所以不知何故属性变得混乱(尽管这种风格不适用于所有事物,只适用于随机细胞,所以这是对这个理论的反对)。谢谢你的帮助!
答案 0 :(得分:1)
您需要更改所有单元格的背景。
if (/* some condition for special background color */) {
cell.backgroundColor = ... // special background color
} else {
cell.backgroundColor = ... // normal background color
}
这可以避免重用问题。对于您希望为某些单元格设置不同的任何单元属性,您必须遵循此模式。
答案 1 :(得分:0)
您可以通过以下方式更改背景颜色。例如,您想要更改备用行颜色: -
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row%2== 0) {
[cell setBackgroundColor:[UIColor yellowColor]];
}
else {
[cell setBackgroundColor:[UIColor whiteColor]];
}
答案 2 :(得分:0)
让我们说你想让细胞可选择和不可选择这样做:
var selected = [Int:Int]()
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! YourCellTypeClass
//check if the cell button is selected
if((selected[indexPath.row]) != nil){
cell.backgroundColor = UIColor.blueColor()
}else{
cell.backgroundColor = UIColor.whiteColor()
}
return cell;
}
func selectCell(index: Int){
let indexPath = NSIndexPath(forRow: index, inSection: 0)
let cell = tableView.cellForRowAtIndexPath(indexPath) as! YourCellTypeClass
if((selected[index]) != nil){
cell.backgroundColor = UIColor.blueColor()
selected[index] = nil
print("unselected: \(index)")
}else{
ccell.backgroundColor = UIColor.redColor()
selected[index] = index
print("selected: \(index)")
}
}