formatar células iPhone + UITableView +
-
05-07-2019 - |
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?
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
}
}