J'ai rencontré un peu de problème. Habituellement, quand je traite avec UITableView, je vais construire une méthode spéciale , configureCell, qui construit les cellules comme tableView en a besoin. Ainsi cellForRowAtIndexPath interroge le configureCell pour obtenir une nouvelle cellule si aucun n'est trouvé dans le cache.UITableView avec une seule cellule personnalisée? (iPhone)
Dans la partie de cellForRowAtIndexPath qui obtient exécuté chaque fois qu'un utilisateur fait défiler:
- (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [theTableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
[self configureCell:cell atIndexPath:indexPath];
}
//this part is always executed!
}
I définir les valeurs d'étiquettes etc., de mon modèle. Cela fonctionne bien et je crois que c'est ce qui devrait fonctionner correctement et être le moins contraignant pour le processeur. D'après ce que je peux lire dans le Guide TableView.
Mon problème est maintenant que la première cellule de ma tableView est différente des autres. J'ai une icône spéciale et d'autres choses qui la sépare des autres cellules.
Dans ma cellule de configuration je puis essayé de demander:
if (indexPath.row == 0) {
//do special setup!
}
Ceci est une mauvaise idée que les charges paresseux tableView les cellules et donc la première cellule qui est hors de l'écran, lorsqu'il est défilée à l'écran, obtiendra également indexPath.row = 0
alors maintenant j'ai une "cellule spéciale" pour chaque 7 cellules. Comment contourner celui-ci?
Un deuxième problème qui provient également de ce qui précède: J'ai un UIView
personnalisé placé dans toutes les cellules accessoryView
. Lorsque l'utilisateur appuie sur un bouton "Modifier", tous les accessoires des cellules doivent être remplacés par une icône indiquant que nous sommes en "mode édition". Ici encore, cela ne se produit que pour les cellules à l'écran, lorsque le défilement de cellules "anciennes" est extrait du cache ou que de nouvelles cellules sont créées qui ne savent pas que nous sommes en mode édition.
Lorsque vous appuyez sur une cellule, il n'y a aucun doute sur le indexPath.row
de la cellule engagée, cet index que vous devez appaire avec votre tableau de modèles pour comprendre ce que l'utilisateur a tapé. Mais il semble que des règles différentes s'appliquent lorsque TableView manipule les cellules (en les tirant à l'écran, hors écran, en les effaçant, en les ajoutant).
Je suppose, je demande; pour suivre les meilleures pratiques et ne pas combattre le SDK, que dois-je faire pour obtenir la fonctionnalité désirée et à quel stade du cycle de vie de la Cellule dois-je appliquer cette logique?
quelqu'un L'espoir peut me guider dans la bonne direction :) merci d'avance :) Vous
Quel style de TableViewController utilisez-vous? –
Ahh n'a pas vu ta question là Rob. C'est un UITableView que j'ai manuellement ajouté à un UIViewController. Il n'utilise pas de sections. comme ceci: self.tableView = [[[UITableView alloc] initWithFrame: self.view.bounds] autorelease]; Est-ce que cela répond à votre question? – RickiG
Juste changé pour: \t self.tableView = [[[UITableView alloc] initWithFrame: style self.view.bounds: UITableViewStylePlain] autorelease]; Pour être sûr :) – RickiG