1

我在这里使用 cellForRowAtIndexPath :

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if(cell == nil)
        cell = [self getCellContentView:CellIdentifier];


    UILabel *lbl = (UILabel*)[cell.contentView viewWithTag:1];

    for (UITableViewCell *c in [tbl visibleCells])
    {
     //   UITableViewCell *cell2 = [tbl cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];
        UILabel *lbl = (UILabel*)[c.contentView viewWithTag:1];
        lbl.textColor = [UIColor redColor];
    }

    if([tbl indexPathForCell:cell].section==0)
        lbl.textColor = [UIColor whiteColor];


    UILabel *lblTemp1 = (UILabel *)[cell viewWithTag:1];
    UILabel *lblTemp2 = (UILabel *)[cell viewWithTag:2];

    //First get the dictionary object

    lblTemp1.text =  @"test!";
    lblTemp2.text = @"testing more";

    NSLog(@"%@",[tbl indexPathForCell:cell]);

    return cell;


}

但是仍然使我的一些细胞变成白色而不是灰色。

如何仅将行中的第一项更改为白色?

4

1 回答 1

5

第一:抛弃

for (UITableViewCell *c in [tbl visibleCells])
{
    //UITableViewCell *cell2 = [tbl cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];
    UILabel *lbl = (UILabel*)[c.contentView viewWithTag:1];
    lbl.textColor = [UIColor redColor];
}

并将其更改为

UILabel *lbl = (UILabel*)[c.contentView viewWithTag:1];
lbl.textColor = [UIColor redColor];

无需遍历此处所有可见的单元格。

然后改变

if([tbl indexPathForCell:cell].section==0)
        lbl.textColor = [UIColor whiteColor];

if((indexPath.section==0)&&(indexPath.row==0))
        lbl.textColor = [UIColor whiteColor];

如果这个类/对象是几个 tableViews 的委托,你应该添加额外的检查

if ((tableView == correctTableView)&&...

值得注意的是

[tbl indexPathForCell:cell]

无关紧要。您的参考是参数(NSIndexPath *)indexPath

如果问题仍然存在,您应该发布您的getCellContentView:方法的代码。

编辑:根据 rmaddy 的建议,因为cellForRowAtIndexPath:性能很重要,所以最好使用:

if((indexPath.section==0)&&(indexPath.row==0))
{
    lbl.textColor = [UIColor whiteColor];
}
else
{
    lbl.textColor = [UIColor redColor];
}

这样,您在处理第一个单元格时可以避免不必要的双重更改。

于 2012-11-22T16:52:04.463 回答