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];

このクラス/オブジェクトが複数の tableView のデリゲートである場合は、追加のチェックを追加する必要があります

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

それは注目に値する

[tbl indexPathForCell:cell]

は関係ありません。あなたの参照は parameter(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 に答える