我代表我的方法的代码效果很好,但是,当我向下滚动时,我在所有部分都检查了一些UItableViewCells。 能帮我弄清楚我的逻辑有什么问题吗? 这是我的全部代码:
定义文件.h:
@interface RechercheThematiqueViewController : UIViewController{
NSDictionary *tableContents;
NSArray *sortedKeys;
}
//added
@property(nonatomic,copy)NSMutableArray *tableData;
//
-(IBAction)goBackToFirstView:(id)sender;
@end
实施文件.m:
static NSString * const kCellTextKey = @"CellTextKey";
static NSString * const kCellStateKey = @"CellStateKey";
//
#import "RechercheThematiqueViewController.h"
@implementation RechercheThematiqueViewController
@synthesize tableData;
- (void)viewDidLoad
{
NSArray *tempArray = [[NSArray alloc]
initWithObjects:@"Mairie",@"Préfectures et sous-préfectures",@"Palais de justice",@"Commissariat de police",@"Gendarmerie",@"Caisse primaire d'assurance maladie",@"Banque",@"Centre commercial et grand magasin",@"Supermarché et hypermarché",@"Agence immobilière",@"Location d'appartement",@"Notaire",@"Discothèques",@"Casino",@"théâtre et concert",@"cinéma",@"musée",@"Bibliothèque et médiathèque",@"parc d'attraction",@"Zoo/parc animalier",@"Club de forme",@"Association et club de sport",@"Stade et complexe sportif",@"Golf",@"Tennis",@"Equitation",@"Garage auto / moto",@"Auto-école",@"Stations services",@"Hôtel",@"Camping",@"Location saisonnière",@"Village et club de vacances",@"Restaurant",@"pizzeria",@"traiteur",@"Bar",@"Restauration rapide",@"Service d'urgence",@"Médecin généraliste",@"Kiné",@"Dentiste",@"Clinique",@"Maternité",@"Pharmacies",@"Vétérinaire",@"office de tourisme",@"Visite de Sites et circuits touristiques",@"Agence de voyages",nil];
NSMutableArray *arr = [[NSMutableArray alloc] initWithCapacity:[tempArray count]];
for(NSString * myStr in tempArray) {
NSNumber *state = [NSNumber numberWithBool:NO];
NSLog(@"%@",myStr);
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:myStr, kCellTextKey, state, kCellStateKey, nil];
[arr addObject:dict];
}
tableData = [arr mutableCopy];
//
//charger le TableView
//section1
NSArray *arrTemp1 = [[NSArray alloc]
initWithObjects:@"Mairie",@"Préfectures et sous-préfectures",@"Palais de justice",@"Commissariat de police",@"Gendarmerie",@"Caisse primaire d'assurance maladie",nil];
//section2
NSArray *arrTemp2 = [[NSArray alloc]
initWithObjects:@"Banque",@"Centre commercial et grand magasin",@"Supermarché et hypermarché",nil];
//section3
NSArray *arrTemp3 = [[NSArray alloc]
initWithObjects:@"Agence immobilière",@"Location d'appartement",@"Notaire",nil];
//section4
NSArray *arrTemp4 = [[NSArray alloc]
initWithObjects:@"Discothèques",@"Casino",@"théâtre et concert",@"cinéma",@"musée",@"Bibliothèque et médiathèque",@"parc d'attraction",@"Zoo/parc animalier",nil];
//section5
NSArray *arrTemp5 = [[NSArray alloc]
initWithObjects:@"Club de forme",@"Association et club de sport",@"Stade et complexe sportif",@"Golf",@"Tennis",@"Equitation",nil];
//section6
NSArray *arrTemp6 = [[NSArray alloc]
initWithObjects:@"Garage auto / moto",@"Auto-école",@"Stations services",nil];
//section7
NSArray *arrTemp7 = [[NSArray alloc]
initWithObjects:@"Hôtel",@"Camping",@"Location saisonnière",@"Village et club de vacances",nil];
//section8
NSArray *arrTemp8 = [[NSArray alloc]
initWithObjects:@"Restaurant",@"pizzeria",@"traiteur",@"Bar",@"Restauration rapide",nil];
//section9
NSArray *arrTemp9 = [[NSArray alloc]
initWithObjects:@"Service d'urgence",@"Médecin généraliste",@"Kiné",@"Dentiste",@"Clinique",@"Maternité",@"Pharmacies",@"Vétérinaire",nil];
//section10
NSArray *arrTemp10 = [[NSArray alloc]
initWithObjects:@"office de tourisme",@"Visite de Sites et circuits touristiques",@"Agence de voyages",nil];
NSDictionary *temp =[[NSDictionary alloc]
initWithObjectsAndKeys:arrTemp1,@"Administrations Enseignement",arrTemp2,
@"Commerces Banques",arrTemp3,@"Immobilier",arrTemp4,@"Divertissement Culture",arrTemp5,@"Sports Loisirs",arrTemp6,@"Auto - moto",arrTemp7,@"Hébergement",arrTemp8,@"Restauration",arrTemp9,@"Santé",arrTemp10,@"Tourisme",nil];
self->tableContents =temp;
self->sortedKeys =[[self->tableContents allKeys]
sortedArrayUsingSelector:@selector(compare:)];
[super viewDidLoad];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return [self->sortedKeys count];
}
- (NSString *)tableView:(UITableView *)tableView
titleForHeaderInSection:(NSInteger)section
{
return [self->sortedKeys objectAtIndex:section];
}
- (NSInteger)tableView:(UITableView *)table
numberOfRowsInSection:(NSInteger)section {
NSArray *listData =[self->tableContents objectForKey:
[self->sortedKeys objectAtIndex:section]];
return [listData count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier = @"CheckedTableViewCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
NSDictionary *rowData = [self.tableData objectAtIndex:indexPath.row];
cell.textLabel.text = [rowData objectForKey:kCellTextKey];
if ([[rowData objectForKey:kCellStateKey] boolValue]) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
} else {
cell.accessoryType = UITableViewCellAccessoryNone;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSDictionary *dict = [self.tableData objectAtIndex:indexPath.row];
BOOL newState = ![[dict objectForKey:kCellStateKey] boolValue];
NSDictionary *newDict = [NSDictionary dictionaryWithObjectsAndKeys:[dict objectForKey:kCellTextKey], kCellTextKey, [NSNumber numberWithBool:newState], kCellStateKey, nil];
[self.tableData replaceObjectAtIndex:indexPath.row withObject:newDict];
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
}
@end
答案 0 :(得分:0)
你的细胞没有自动释放:
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease];
也许这是错误?
你应该在:
中取消选择你的Cell- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
...
...
}
答案 1 :(得分:0)
实际上你的代码存在逻辑错误。但是你需要决定你的要求。
无论如何,似乎对于每个部分,你想要每个部分的arrTemp1,arrTemp2,arrTemp3 ..的内容。但是根据你的代码,它显示了来自tableData
的元素,因此每个部分的元素都是相同的。唯一的问题是,由于您从tableContents
字典获取每个部分的计数,因此计数会有所不同。
因此,您可能需要查看- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
中的逻辑是否必须显示tableData
或tableContents
中的内容。如果您使用tableData
,则元素相同,因此,如果您签入一个部分,它将反映在所有部分中。