我的分区tableview中的哪一行?

一方面,我有一个女巫plist根钥匙是一个12项的数组。 在第二手中,我有一个分段的tableview(与3个部分MOTIF-COULEUR-其他)我想要的是,tableview正确显示部分中的数据。 在第一部分,我想在第二部分我的plist项目0,1,2,3我想在我最后一节我的plist项目4,5,6,7,8,9,10有项目11和12

可能这真的很简单,但它只是让我感到痛苦

她是我的RootViewController.h&.m

.h

// // RootViewController.h // FichesRaces // // Created by a3116b on 28/05/11. // Copyright 2011 __MyCompanyName__. All rights reserved. // #import <UIKit/UIKit.h> @interface RootViewController : UITableViewController <UITableViewDataSource, UITableViewDelegate> { NSArray *tabWebSites; } @property (nonatomic, retain) NSArray *tabWebSites; @end 

.m

 // // RootViewController.m // FichesRaces // // Created by a3116b on 28/05/11. // Copyright 2011 __MyCompanyName__. All rights reserved. // #import "RootViewController.h" #import "CatsList.h" #import "DetailViewController.h" @implementation RootViewController @synthesize tabWebSites; - (void)viewDidLoad { [super viewDidLoad]; // Charger le fichier .plist dans un tableau que l'on appelera arrayFromFile NSString *path = [[NSBundle mainBundle] pathForResource:@"cats" ofType:@"plist"]; NSDictionary *dictFromFile = [[NSDictionary alloc] initWithContentsOfFile:path]; NSArray *arrayFromFile = [dictFromFile objectForKey:@"Root"]; // Créons un tableau temporaire que nous allons remplir avec un objet Website par NSDictionnary contenu dans le fichier .plist // Notez l'utilisation de NSEnumerator pour parcourir un tableau NSMutableArray *websitesToAdd = [[NSMutableArray alloc] init]; NSEnumerator *enumerator = [arrayFromFile objectEnumerator]; NSDictionary *anObject; while ((anObject = [enumerator nextObject])) { CatsList *cl = [[CatsList alloc] initWithDictionaryFromPlist: anObject]; [websitesToAdd addObject: cl]; [cl release]; } // Remplir la propriété tabWebSites avec le contenu du NSMutableArray précédent self.tabWebSites = [NSArray arrayWithArray:websitesToAdd]; // Gestion de la mémoire : pour chaque alloc, n'oubliez pas le release qui va avec ! [websitesToAdd release]; [arrayFromFile release]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; } - (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; } - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { if ( section == 0 ) return @"Les Motifs"; if ( section == 1 ) return @"Les Couleurs"; if ( section == 2 ) return @"Bon à Savoir"; return @""; // return [sectionHeaders objectAtIndex:section]; } // Customize the number of sections in the table view. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 3; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { switch (section) { case 0: return 4; break; case 1: return 13; break; default: return 3; break; } } // Customize the appearance of table view cells. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; if (indexPath.section == 2) { CellIdentifier = @"cell"; } // Les cellules sont mises en cache pour accélérer le traitement, sous l'identifiant "Cell", // on essaie récupère ce modèle de cellule s'il est déjà en cache UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; // Si on n'a pas réussi à sortir une cellule du cache, on crée un nouveau modèle de cellule // et on l'enregistre dans le cache if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; /* (indexPath.section == 0 && indexPath.row ==0); (indexPath.section == 1 && indexPath.row == 5); (indexPath.section == 2 && indexPath.row == 13);*/ /* //----------------------------------------------- NSUInteger sectionNumber = [indexPath section]; NSUInteger rowNumber = [indexPath row]; // determine the correct row. // it will be restarted from 0 every time, and as // we're just loading in from one array, we need to // offset it by the right amount depending on the section. // int sectionNumber = indexPath.row; if ( sectionNumber == 0 ) rowNumber = 4; if ( sectionNumber == 1 ) rowNumber = +5; if ( sectionNumber == 2 ) rowNumber = +18; //----------------------------------------------- */ } // On récupère l'objet Website qui correspon à la ligne que l'on souhaite afficher CatsList *cl = [self.tabWebSites objectAtIndex:indexPath.row]; // On configure la cellule avec le titre du site et sa description cell.textLabel.text = cl.TITLE; cell.detailTextLabel.text = cl.DESCRIPTION; //important ajouter signalisation sinon APP REFUSE cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; // On renvoie la cellule configurée pour l'affichage return cell; } /*- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.section == 3) { return nil; } return indexPath; }*/ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { DetailViewController *detailVC = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil]; detailVC.CL = [self.tabWebSites objectAtIndex:indexPath.row]; [self.navigationController pushViewController:detailVC animated:YES]; [detailVC release]; } - (void)didReceiveMemoryWarning { // Releases the view if it doesn't have a superview. [super didReceiveMemoryWarning]; // Relinquish ownership any cached data, images, etc that aren't in use. } - (void)viewDidUnload { [super viewDidUnload]; // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand. // For example: self.myOutlet = nil; } - (void)dealloc { [super dealloc]; } @end 

谢谢,你的回答对我来说非常有用

你应该调整你的数据源(你从plist构build的NSArray)到pipe理你所拥有的不同部分。 例如,而不是做:

 // On récupère l'objet Website qui correspon à la ligne que l'on souhaite afficher CatsList *cl = [self.tabWebSites objectAtIndex:indexPath.row]; 

你可以这样做:

 CatsList *cl = [self.tabWebSites objectAtIndex:[self linearIndexFromIndexPath:indexPath]]; 

其中linearIndexFromIndexPath:将被定义,例如,像这样:

 - (NSUInteger)linearIndexFromIndexPath:(NSIndexPath*)indexPath { NSUInteger result = 0; for (int i = 0; i < indexPath.section ; i++) { result += [self numberOfSectionsInTableView:self.tableView]; } return result + indexPath.row; } 

或类似的东西。 请注意,在我的实现中,我决定不要硬编码每个部分中的行数,而是使用委托方法检索它们。 这使得代码更复杂,但更易于修改。

你确定打印每个部分的正确的行数? 随着你给的信息,我会打印这个。 也许还有一些其他的错误,但这是一个开始。

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { switch (section) { case 0: return 4; break; case 1: return 7; break; default: return 2; break; } }