89 votes

Le chargement d'une Réutilisables UITableViewCell à partir d'une Plume

Je suis en mesure de design personnalisé UITableViewCells et charger un peu fine à l'aide de la technique décrite dans le fil trouvé à http://forums.macrumors.com/showthread.php?t=545061. Cependant, l'utilisation de cette méthode ne vous permet plus d'init de la cellule avec un reuseIdentifier qui signifie que vous avez à créer de nouvelles instances de chaque cellule à chaque appel. Quelqu'un a trouvé un bon moyen de toujours le cache de certains types de cellules pour les réutilise, mais encore être en mesure de les concevoir dans Interface Builder?

119voto

Tim Keating Points 2942

En fait, depuis que vous êtes à la construction de la cellule dans Interface Builder, il suffit de définir la réutilisation de l'identificateur:

IB_reuse_identifier

Ou si vous exécutez Xcode 4, vérifier les Attributs de l'inspecteur de l'onglet:

enter image description here

(Edit: Après votre XIB est généré par XCode, il contient un vide UIView, mais nous avons besoin d'un UITableViewCell; donc, vous devez supprimer manuellement le UIView et insérer une Vue de la Table de la Cellule. Bien sûr, l'IB ne montrent aucune UITableViewCell paramètres pour une UIView.)

74voto

Louis Gerbarg Points 33025

Mettre en œuvre une méthode avec la signature de la méthode:

- (NSString *) reuseIdentifier {
  return @"myIdentifier";
}

66voto

wzs Points 883

Maintenant, dans l'iOS 5 est un UITableView méthode:

- (void)registerNib:(UINib *)nib forCellReuseIdentifier:(NSString *)identifier

47voto

jrainbow Points 551

Je ne me souviens pas où j'ai trouvé ce code à l'origine, mais c'est très bien fonctionné pour moi jusqu'à présent.

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

    static NSString *CellIdentifier = @"CustomTableCell";
    static NSString *CellNib = @"CustomTableCellView";

    UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
    	NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellNib owner:self options:nil];
    	cell = (UITableViewCell *)[nib objectAtIndex:0];
    }

    // perform additional custom work...

    return cell;
}


Exemple d'Interface Builder installation...

alt text

12voto

Regarde la réponse que j'ai donné à cette question:

http://stackoverflow.com/questions/202471/is-it-possible-to-design-nscell-subclasses-in-interface-builder

Il est non seulement possible de concevoir un UITableViewCell de l'IB, il est souhaitable parce que sinon tout le manuel de câblage et de placement de plusieurs éléments est très fastidieux. Performaance est très bien aussi longtemps que vous êtes prudent de prendre tous les éléments opaques lorsque cela est possible. Le reuseID est définie dans l'IB pour les propriétés de la UITableViewCell, puis vous utilisez la correspondance de la réutilisation de l'ID dans le code lors de la tentative de résorption de l'.

J'ai aussi entendu parler de certains des présentateurs lors de la WWDC de l'année dernière que vous ne devriez pas faire la vue de la table cellules de l'IB, mais c'est une charge de lits superposés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: