J'essaie de créer une application dans xcode, qui - à côté des autres - lit un flux rss et affiche les messages. Je suis nouveau avec objectif-c et trouve parfois un peu difficile. J'utilise un NSMutableArray pour les histoires récupérées (messages). Chaque histoire est représentée par un NSMutableDictionary qui contient le titre, l'objet, la date et le lien du message. Tout ceci est affiché dans un UITableView dans un UIViewController. J'ai personnalisé ma propre cellule, donc je peux y afficher plusieurs étiquettes. Mon problème est que si j'utilise tableView: heightForRowAtIndexPath :, les 5 premières cellules (qui correspondent à l'écran) s'affichent bien, mais si vous faites défiler vers le bas, les cellules suivantes semblent avoir le même contenu avec le premier 5 (c'est-à-dire les cellules 0 -4 affichage ok, la cellule 5 a le contenu de la cellule 0, la cellule 6 de la cellule 1, etc.)! Si je supprime le tableView: heightForRowAtIndexPath: tout est très bien (sauf ne pas avoir la taille de la cellule que je veux)Objectif C UITableView - Les cellules du tableau affichent un contenu erroné après avoir changé la hauteur de la cellule
Voici comment le code ressemble:
// NavigationContentsViewController.h
@interface NavigationContentsViewController :
UIViewController <UITableViewDelegate, UITableViewDataSource> {
UITableView *myTableView;
IBOutlet UITableView * newsTable;
UIActivityIndicatorView * activityIndicator;
CGSize cellSize;
NSXMLParser * rssParser;
NSMutableArray * stories;
NSMutableDictionary * item; // it parses through the document, from top to bottom...
NSString * currentElement;
NSMutableString * currentTitle, * currentDate, * currentSummary, * currentLink;
}
@property(nonatomic,retain)NSMutableArray *itemsList;
@property(nonatomic,retain)UITableView *myTableView;
- (void)parseXMLFileAtURL: (NSString *)URL;
.
//NavigationContentsViewController.m
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// Configure the cell.
static NSString *MyIdentifier = @"MyIdentifier";
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil){
cell = [[[CustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
// Set up the cell
int storyIndex = indexPath.row;
//[cell setText:[[stories objectAtIndex: storyIndex] objectForKey: @"title"]];
//Story title
//cell.textLabel.text = [[stories objectAtIndex: storyIndex] objectForKey: @"title"];
//cell.textLabel.font = [UIFont boldSystemFontOfSize:14];
cell.lTitle.text = [[stories objectAtIndex: storyIndex] objectForKey: @"title"];
cell.lSummary.text = [[stories objectAtIndex: storyIndex] objectForKey: @"summary"];
cell.lDate.text = [[stories objectAtIndex: storyIndex] objectForKey: @"date"];
return cell;
}
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *selectedCellItem = [NSString stringWithFormat:@"%d", indexPath.row];
TableViewController *fvController = [[TableViewController alloc] initWithNibName:@"TableViewController" bundle:[NSBundle mainBundle]];
fvController.selectedCellItem = selectedCellItem;
[self.navigationController pushViewController:fvController animated:YES];
[fvController release];
fvController = nil;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 80;
}
Des indices? [EDIT: changed int storyIndex = indexPath.row;]
Pourriez-vous expliquer pourquoi utilisez-vous 'int storyIndex = [indexPath indexAtPosition: [longueur du chemin d'index] - 1];' au lieu de 'int storyIndex = indexPath.row;'? – knuku
S'il y a des sections impliquées, cela devient un peu compliqué ... dans ce cas, je vous recommande de créer plusieurs NSMutableArrays pour chaque section (mais là encore, vous devrez probablement créer un plus grand tableau pour le stocker, ou s'il devient trop gros, vous devrez commencer à charger directement à partir du disque). – FeifanZ
@ NR4TR Tout d'abord merci de m'embêter avec ma question! Comme à écrit, c'est la première fois que je fais face à obj-c, donc il y a plusieurs fois que je pourrais utiliser de mauvaises choses, ou faire des choses d'une manière étrange. Il suffit de lire votre recommandation, et je me suis senti stupide ... Quoi qu'il en soit, cela ne change rien à ma question :) – CrisDeBlonde