La question est simple : Comment chargez-vous les UITableViewCell
à partir de fichiers Xib ? En procédant ainsi, vous pouvez utiliser Interface Builder pour concevoir vos cellules. La réponse n'est apparemment pas simple en raison de problèmes de gestion de la mémoire. Ce fil mentionne le problème et suggère une solution, mais il s'agit d'une version pré-NDA et il n'y a pas de code. Voici une long fil qui discute de la question sans apporter de réponse définitive.
Voici quelques codes que j'ai utilisés :
static NSString *CellIdentifier = @"MyCellIdentifier";
MyCell *cell = (MyCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil];
cell = (MyCell *)[nib objectAtIndex:0];
}
Pour utiliser ce code, créez MyCell.m/.h, une nouvelle sous-classe du fichier UITableViewCell
et ajouter IBOutlets
pour les composants que vous souhaitez. Créez ensuite un nouveau fichier "Empty XIB". Ouvrez le fichier Xib dans IB, ajoutez un fichier UITableViewCell
définissez son identifiant à "MyCellIdentifier" et sa classe à MyCell et ajoutez vos composants. Enfin, connectez l'objet IBOutlets
aux composants. Notez que nous n'avons pas défini le propriétaire du fichier dans IB.
D'autres méthodes préconisent la définition du propriétaire du fichier et préviennent des fuites de mémoire si le Xib n'est pas chargé via une classe d'usine supplémentaire. J'ai testé les méthodes ci-dessus sous Instruments/Leaks et je n'ai constaté aucune fuite de mémoire.
Alors, quelle est la façon canonique de charger des cellules à partir de Xibs ? Doit-on définir le propriétaire du fichier ? Avons-nous besoin d'une usine ? Si oui, à quoi ressemble le code de la fabrique ? S'il existe plusieurs solutions, précisons les avantages et les inconvénients de chacune d'entre elles...
2 votes
Quelqu'un peut-il modifier le sujet pour poser réellement la question, c'est-à-dire : "Comment charger des UITableViewCells personnalisées à partir de fichiers Xib ?" (Ignorez si cela n'est tout simplement pas possible sur stackoverflow).
1 votes
Pour iOS 5 et au-delà, c'est la solution : stackoverflow.com/questions/15591364/ ce qui est la même chose que la solution de Giuseppe.
0 votes
Note rapide, réponse plus simple (milieu 2013) ici stackoverflow.com/questions/15378788/ jamihash