Frage

Haben Sie eine Idee, um dieses Problem zu lösen?

Dies ist das Richtiger und falscher Weg respektieren:
alt text alt text

Dies ist Arbeitscode:

- (UITableViewCell *)[...] cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    @try {
        newsRow = ((NewsRowController *)[tableView dequeueReusableCellWithIdentifier:@"cell"]);
        if (newsRow == nil) {
            if ( [[Device GetModel] isEqualToString:@"iPad Simulator"] || 
                 [[Device GetModel] isEqualToString:@"iPad"])
                [[NSBundle mainBundle] loadNibNamed:@"NewsRow_ipad" owner:self options:nil];
            else [[NSBundle mainBundle] loadNibNamed:@"NewsRow" owner:self options:nil];

            if ([tableArray count] > 0)
                [newsRow setData:[tableArray objectAtIndex:indexPath.row]];
        }       
    }
    @catch (NSException * e) {
        NSLog(@"a!!!!!");
    }
    return newsRow;
}

... aber weil es in meinem 3G -Gerät ist langsam Wenn ich den Tisch nach oben/nach unten scrolle Ich habe den Code auf diese Weise geändert, das Gerät einfügt, das das Gerät in ViewDIDLoad einfügt und ihn weitergibt cellForRowAtIndexPath:

NSArray *cRow;
@property (nonatomic, retain) NSArray *cRow;
[...]
@syntetize cRow;

- (void)viewDidLoad {
[...]
    if ( [[Device GetModel] isEqualToString:@"iPad Simulator"] 
        || 
        [[Device GetModel] isEqualToString:@"iPad"])
        cRow  = [[[NSBundle mainBundle] loadNibNamed:@"NewsRow_ipad" owner:self options:nil] retain];
        else cRow = [[[NSBundle mainBundle] loadNibNamed:@"NewsRow" owner:self options:nil] retain];
[...]
}

- (UITableViewCell *)[...] cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    @try {
        newsRow = ((NewsRowController *)[tableView dequeueReusableCellWithIdentifier:@"cell"]);
        if (newsRow == nil) {

            //
            // ADDED CODE.
            //
            newsRow = [cRow objectAtIndex:0];    
            //

            if ([tableArray count] > 0)
                [newsRow setData:[tableArray objectAtIndex:indexPath.row]];
        }       
    }
    @catch (NSException * e) {
        NSLog(@"a!!!!!");
    }
    return newsRow;
}

Jetzt zeigt mir die Tabelle nur eine Reihe. Wenn ich scrolle, ändert sich die Zeile, aber es zeigt nur eine Zeile ...
alt text
Was ist das Problem?

Hilft irgendein?

Danke,
EIN

War es hilfreich?

Lösung

In diesem Fall, wenn Sie dequeuereusableCellWithidentifier nennen: Sie erhalten Null zurück, weil es keine Zellen gibt, die ausgestattet werden können. Sie müssen die NIB jedes Mal laden, wenn Sie eine Nilzelle zurückholen, sonst fügen Sie nach dem ersten keine Zellen zur Tabelle hinzu.

Wenn Sie GetModel anrufen, verlangsamt Sie das in ViewDidLoad und speichern es später für die Verwendung.

Höchstwahrscheinlich scrollt Ihre Tabelle aufgrund der Menge an Ansichten, die Sie in jeder Zelle zeichnen, nicht reibungslos. Wenn Ihr Hintergrund immer eine feste Farbe hat, sollten Sie sicherstellen, dass alle Ansichten, die Sie zur Zelle oder undurchsichtigen, hinzufügen. Wenn Sie ein Bild oder einen Gradientenhintergrund benötigen, sollten Sie sich das Zeichnen der Zelle in einer Ansicht ansehen. Apple hat ein gutes Beispiel dafür, wie das hier geht: TableViewSuite. Schauen Sie sich die TimeZoneView -Datei speziell an.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top