Question

ont une idée pour résoudre ce problème?

Ceci est la façon respectly correcte et incorrecte :
text alt text alt

est le code de travail:

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

... mais parce que dans mon appareil 3G lui est lentement quand je défiler la table haut / bas i changé le code de cette manière, l'insertion d'enregistrement de l'appareil dans viewDidLoad et laissez-passer dans 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;
}

Maintenant, la table me montrer qu'une rangée. Si je fais défiler, le changement de ligne, mais il montre qu'une seule ligne ...
text alt
Quel est le problème?

Tout aide?

Merci,
A

Était-ce utile?

La solution

Dans ce cas, lorsque vous appelez dequeueReusableCellWithIdentifier: vous récupérerez nul parce qu'il n'y a pas de cellules qui peuvent être dequeued. Vous devez charger la pointe chaque fois que vous obtenez une cellule nulle retour sinon vous ne serez pas ajouter des cellules à la table après le premier.

Si vous appelez getModel est ce que vous ralentissez pourrait appeler que viewDidLoad et stocker plus tard pour une utilisation sur.

Plus que probablement votre table ne défile pas en douceur en raison de la quantité de vues que vous dessinez dans chaque cellule. Si votre arrière-plan sera toujours une couleur unie, vous devez vous assurer que toutes les vues que vous ajoutez à la cellule ou opaque. Si vous avez besoin d'une image ou un fond dégradé, alors vous devriez regarder dessiner la cellule en une seule vue. Apple a un bon exemple de la façon de le faire ici: TableViewSuite . Plus précisément checkout le fichier TimeZoneView.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top