Frage

Ich verwende folgende Methode in meiner Anwendung:

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

Wenn ich die Anwendung ausführen ich habe 7 Zeilen in meinem Tisch. nur die Zelle der ersten Zeile (Zeilennummer 0) oben Funktion nach formatiert werden soll (wegen der if-Bedingung).

Zelle 1. Zeile (Zeilennummer 0) richtig formatiert ist (gemäss gewünschten Ausgang). Aber wenn ich die Tabelle nach unten scrollen, einer weiteren Zelle wird angezeigt, wie formatierte. Zelle in Zeile Nummer 5

Warum so?

War es hilfreich?

Lösung

Ich stimme mit Vladimir Antwort. Aber ich glaube auch, sollten Sie einen anderen Ansatz verfolgen.

In der aktuellen Situation, die Sie formatieren Sie Ihre Zelle häufig das Verfahren, wie in jedem Scroll aufgerufen wird, und dies führt zu einer suboptimalen Leistung.

Eine elegantere Lösung ist als andere erste Zeile anders formatiert werden nur „einmal“: Wenn Sie Ihre Zellen erstellen

.
    // 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;
    }

Andere Tipps

Ich denke, der Grund ist, dass Tableview wieder verwendet bereits vorhandene Zellen und zeigt sie, wenn es möglich ist. Was passiert hier - wenn Tabelle gescrollt wird und die Zeile 0 wird unsichtbar dann itscorresponding Zelle für eine neu angezeigte Zeile verwendet wird. Also, wenn Sie Zellen sind die Wiederverwendung Sie müssen ihre Eigenschaften zurück:

-(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
   }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top