Pergunta

Eu estou usando seguinte método no meu aplicativo:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(indexPath.row == 0)
    {
        cell.contentView.backgroundColor = [UIColor lightGrayColor];
        cell.contentView.alpha = 0.5;
    }
}   

Quando eu executar o aplicativo eu tenho 7 linhas na minha mesa. De acordo com a função acima apenas a célula de primeira linha (linha número 0) deve ser formatado (por causa da condição se).

celular de primeira linha (linha número 0) é formatado apropriadamente (conforme saída desejada). Mas se eu rolar a tabela para baixo mais uma célula é exibido como formatado:. Célula no número da linha 5

Por que isso?

Foi útil?

Solução

Eu concordo com a resposta de Vladimir. No entanto, eu também acredito que você deve seguir uma abordagem diferente.

Na actual situação estiver a formatar o seu celular com freqüência, como o método é chamado em cada rolagem, e isso leva-lo a um desempenho abaixo do ideal.

A solução mais elegante é formatar 1a linha de forma diferente do que apenas os outros "uma vez":. Quando você cria suas células

    // Customize the appearance of table view cells.
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

        static NSString *CellIdentifier;
        if(indexPath.row == 0)
        CellIdentifier = @"1stRow";
        else
        CellIdentifier = @"OtherRows";

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell==nil) { 
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
            if(indexPath.row == 0){
                cell.contentView.backgroundColor = [UIColor lightGrayColor];  
                cell.contentView.alpha = 0.5;
                    // Other cell properties:textColor,font,...
            }
            else{
                cell.contentView.backgroundColor = [UIColor blackColor];  
                cell.contentView.alpha = 1;
                //Other cell properties: textColor,font...
            }

        }
        cell.textLabel.text = .....
        return cell;
    }

Outras dicas

Eu acho que a razão é que TableView reutiliza células e monitores já existentes los se for possível. O que acontece aqui - quando a tabela é rolada e fileira 0 torna-se invisível celular, então itscorresponding é usado para uma linha recém exibida. Então, se você está reutilizando células você deve redefinir as suas propriedades:

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
   if(indexPath.row == 0) { 
       cell.contentView.backgroundColor = [UIColor lightGrayColor];  
       cell.contentView.alpha = 0.5; } 
   else
   {
    // reset cell background to default value
   }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top