在UITableView中设置复选标记

我正在尝试在UITableView(放置在弹出视图中)中选择的行中设置复选标记。 其实我有这样的事情:

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath { // Check if current row is selected Boolean isNowChecked = NO; if([self.tableView cellForRowAtIndexPath:indexPath].accessoryType == UITableViewCellAccessoryCheckmark) { isNowChecked = YES; } if(isNowChecked) { [self.tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryNone; } else { [self.tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark; } return indexPath; } 

结果我能够选择行,例如我触摸第一项然后我看到复选标记。 当我向下滚动表格视图时,我看到我还检查了其他项目(编号17,22)。 当我取消选中我的第一个项目时,每个检查也会消失。

你有什么建议可能是这种情况的原因,我怎么能避免它?

//在.h中尝试这个//

 NSMutableArray *arr_fortable; 

//在.m

 - (void)viewDidLoad { [super viewDidLoad]; arr_fortable = [[NSMutableArray alloc] init]; for (int i =0; i<5; i++) { NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; [dict setObject:[NSString stringWithFormat:@"%d",i+1] forKey:@"data"]; [dict setObject:@"0" forKey:@"checkmark"]; [arr_fortable addObject:dict]; } } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { // Return the number of sections. return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // Return the number of rows in the section. return [arr_fortable count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; } // Configure the cell... cell.textLabel.text = [[arr_fortable objectAtIndex:indexPath.row] objectForKey:@"data"]; if ([[[arr_fortable objectAtIndex:indexPath.row] objectForKey:@"checkmark"] integerValue] == 1) { cell.accessoryType = UITableViewCellAccessoryCheckmark; } else { cell.accessoryType = UITableViewCellAccessoryNone; } return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if ([[[arr_fortable objectAtIndex:indexPath.row] objectForKey:@"checkmark"] integerValue] == 1) { [[arr_fortable objectAtIndex:indexPath.row] setObject:@"0" forKey:@"checkmark"]; } else { [[arr_fortable objectAtIndex:indexPath.row] setObject:@"1" forKey:@"checkmark"]; } [self.tableView reloadData]; } 

看到这个..

tableView:didSelectRowAtIndexPath:并更新tableView中检查的数据:cellForRowAtIndexPath:如下所示:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // do usual stuff here including getting the cell // determine the data from the IndexPath.row if (data == self.checkedData) { cell.accessoryType = UITableViewCellAccessoryCheckmark; } else { cell.accessoryType = UITableViewCellAccessoryNone; } return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // determine the selected data from the IndexPath.row if (data != self.checkedData) { self.checkedData = data; } [tableView reloadData]; } 
Interesting Posts