当我向上和向下滚动时,随机检查UITableViewCell

时间:2012-01-02 09:28:36

标签: iphone uitableview ios5

我代表我的方法的代码效果很好,但是,当我向下滚动时,我在所有部分都检查了一些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

2 个答案:

答案 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中的逻辑是否必须显示tableDatatableContents中的内容。如果您使用tableData,则元素相同,因此,如果您签入一个部分,它将反映在所有部分中。