cellForRowAtIndexPath属性更改更改多个单元格

时间:2014-07-13 18:21:00

标签: ios objective-c uitableview

免责声明:我在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];
...

我怀疑因为所有细胞都是用这个标识符生成的,所以不知何故属性变得混乱(尽管这种风格不适用于所有事物,只适用于随机细胞,所以这是对这个理论的反对)。谢谢你的帮助!

3 个答案:

答案 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)")
    }


}