2010-04-08 6 views
1

J'essaie d'utiliser un UITableViewCell personnalisé et je l'ai placé dans le même fichier nib que le contrôleur UITableView. Pour cela, les fichiers sont: NTItems.h, NTItems.m et NTItems.xib.La cellule personnalisée échoue juste

J'ai défini la cellule dans le fichier d'en-tête:

IBOutlet UITableViewCell *cellview; 

et je l'ai appliqué correctement la propriété: nonatomic, Fidéliser il est donc là:

@property (nonatomic, retain) IBOutlet UITableViewCell *cellview; 

Dans le fichier m - I J'ai synthétisé le périphérique variable et j'utilise ceci pour obtenir la cellule personnalisée:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"cellview"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 
    cell = self.cellview; 
    } 

    Product *aProduct = [appDelegate.products objectAtIndex:indexPath.row]; 

    name.text = aProduct.name; 
    upc.text = [NSString stringWithFormat:@"UPC%@",aProduct.upc]; 
    price.text = aProduct.pid; 
    return cell; 
} 

Cependant, quand je charger la table, je reçois ce gâchis horrible

alt text http://dl.dropbox.com/u/1545603/tablecellissue.png

Il devrait y avoir plus de 1 cellule montrant les données aussi bien. Il semble que seules les dernières données apparaissent en ce moment.

+1

Si vous pouviez fournir un peu plus de code contextuel, ce serait génial. –

+0

Oui, ajouté plus :) – bear

Répondre

1

Vous ne pouvez pas réutiliser une seule cellule à partir d'une prise comme celle-ci. Pensez-y: vous retournez la même cellule pour chaque appel à tableView:cellForRowAtIndexPath:. C'est votre travail de demander à tableView de retirer une cellule si possible, et d'en créer une nouvelle chaque fois que ce n'est pas le cas. Au lieu de cela, stockez votre cellule personnalisée dans une plume distincte et lisez cette plume dans votre code if (cell == nil) { } lorsque la suppression de la file d'attente échoue.

Le fichier nib contenant la cellule personnalisée doit avoir NSObject propriétaire du fichier et ne doit contenir que la pointe de la cellule (aucun autre objet).

J'utilise cette fonction pour charger la plume:

- (id)loadObjectFromNibNamed: (NSString *)inName; 
{ 
    id objectsInNib = [[NSBundle mainBundle] loadNibNamed: inName 
                owner: self 
                options: nil]; 
    NSAssert1(objectsInNib != nil, @"loadNibNamed %@ returned nil", inName); 
    NSAssert2([objectsInNib count] == 1, @"lodNibNamed %@ returned %d items", inName, [objectsInNib count]); 
    return [objectsInNib objectAtIndex: 0]; 
    } 

Puis dans mon tableView:cellForRowAtIndexPath: je:

if (cell == nil) { 
    cell = [self loadObjectFromNibNamed: nibName]; 
} 

(j'utilise le même nom nib comme mon identifiant de réutilisation cellulaire.)

1

Qu'est-ce qui se passe, c'est que vous utilisez seulement une cellule pour l'ensemble de la table. Cela signifie que la dernière cellule dessinée est la seule visible. Les cellules antérieures n'existent pratiquement pas.

Vous voudrez passer en revue ce document sur la façon de créer des cellules de vue de table personnalisées à partir d'un NIB.

Il y a des instructions étape par étape.

Questions connexes