Domanda

hanno un'idea per risolvere questo problema?

Questo è il modo in cui corretta e sbagliato posti rispettivamente:
alt text alt text

Questo codice funziona:

- (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;
}

... ma perché nel mio dispositivo 3G è lentamente quando ho scorrere tavolo su / giù Ho cambiato il codice in questo modo, l'inserimento di controllo periferiche nel viewDidLoad e passaggio in 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;
}

Ora la tabella mi mostra solo una riga. Se ho scorrere, il cambiamento di fila, ma mostrano solo una riga ...
alt text
Qual è il problema?

Qualsiasi aiuta?

Grazie,
A

È stato utile?

Soluzione

In questo caso quando si chiama dequeueReusableCellWithIdentifier: verranno restituiti pari a zero perché non ci sono cellule che possono essere rimosse dalla coda. È necessario caricare il pennino ogni volta che si ottiene una cella pari a zero di nuovo altrimenti non sarà l'aggiunta di eventuali cellule al tavolo dopo la prima.

Se chiamando getModel è ciò che sta rallentando si potrebbe chiamare che nel viewDidLoad e conservarla per l'utilizzo in seguito.

Più che probabile il vostro tavolo non è scorre senza intoppi a causa della quantità di punti di vista si sta disegnando in ogni cella. Se lo sfondo sarà sempre un colore solido è necessario assicurarsi che tutti i punti di vista si sta aggiungendo alla cella o opaco. Se avete bisogno di un'immagine o uno sfondo sfumato, allora si dovrebbe guardare a disegnare la cella tutto in un'unica finestra. Apple ha un buon esempio di come fare questo qui: TableViewSuite . In particolare checkout il file TimeZoneView.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top