J'essaie de mélanger des cellules dynamiques et statiques dans une vue de tableau groupé : J'aimerais obtenir deux sections avec des cellules statiques en haut, suivi d'un section des cellules dynamiques (veuillez vous référer à la capture d'écran ci-dessous). J'ai défini le contenu de la vue tableau à cellules statiques .
Editar
Sur la base des conseils d'AppleFreak, j'ai modifié mon code comme suit :
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell;
if (indexPath.section <= 1) { // section <= 1 indicates static cells
cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];
} else { // section > 1 indicates dynamic cells
CellIdentifier = [NSString stringWithFormat:@"section%idynamic",indexPath.section];
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
}
return cell;
}
Cependant, mon application se bloque avec le message d'erreur
Terminer l'application en raison d'une exception non attrapée NSInternalInconsistencyException', reason : 'UITableView dataSource doit renvoyer une cellule de tableView:cellForRowAtIndexPath:'.
pour la section 0 et la ligne 0. La cellule renvoyée par la fonction cell = [super tableView:tableView cellForRowAtIndexPath:indexPath]
pour la section 0 et la ligne 0 est nil
.
Quel est le problème avec mon code ? Pourrait-il y avoir des problèmes avec mes prises ? Je n'ai pas défini de points de vente parce que j'ai sous-classé la classe UITableViewController
et il n'y a apparemment aucun débouché pour que la tableview soit définie ( ?). Avez-vous des suggestions sur la meilleure façon de procéder ?
Edit II
J'ai recréé ma scène dans le storyboard (veuillez vous référer à ma capture d'écran mise à jour ci-dessus) et réécrit le contrôleur de vue afin de partir d'une nouvelle base. J'ai également lu la description dans le forum d'Apple comme applefreak l'a suggéré. Cependant, je me heurte à mon premier problème avec la méthode numberOfSectionsInTableView:tableView
dans lequel j'incrémente d'une unité le nombre de sections statiques (deux).
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [super numberOfSectionsInTableView:tableView] + 1 ; }
L'application a planté avec le message d'erreur :
Terminer l'application en raison d'une exception non attrapée 'NSRangeException', raison : '*** -[__NSArrayI objectAtIndex :]: index 2 beyond bounds [0 .. 1]''
Pourquoi ce code ne fonctionne-t-il pas pour moi alors que j'ai suivi les recommandations d'Apple et d'applefreak ? Est-il possible que le tableView ait un peu changé dans iOS 6 ?
Solution : J'ai réussi à le faire fonctionner maintenant en utilisant l'exemple de code d'AppleFreaks dans sa réponse ci-dessous. Merci, AppleFreak !
Edit III : Sélection des cellules :
Comment puis-je gérer sélection des cellules dans une vue de tableau de cellules mixte (cellules dynamiques et statiques) ? Quand dois-je appeler super
et quand dois-je appeler self tableView
? Lorsque j'utilise
[[super tableView] selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]
et essayer de vérifier les chemins d'index sélectionnés avec :
UITableView *tableView = [super tableView];
if ( [[tableView indexPathForSelectedRow] isEqual:customGrowthIndexPath] ) { .. }
J'obtiens une valeur de retour de nil
.
Comme je n'arrive pas à trouver la source de mon erreur, j'apprécierais vraiment votre aide.