如何select另一个表行时将自定义图标删除到UITableViewCellAccessoryCheckmark

我正在使用以下代码将自定义图标添加到UITableViewCellAccessoryCheckmark。 问题在于单元格复选标记不会在另一行被触摸/select时取消select

这是我的代码:

- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { int index = indexPath.row; id obj = [listOfItems objectAtIndex:index]; //This toggles the checkmark UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; if (cell.accessoryType == UITableViewCellAccessoryNone) { cell.accessoryType = UITableViewCellAccessoryCheckmark; UIImage *image = [UIImage imageNamed:@"icon-tick.png"]; UIButton *downloadButton = [UIButton buttonWithType:UIButtonTypeCustom]; [downloadButton setImage:image forState:UIControlStateNormal]; [downloadButton setFrame:CGRectMake(0, 0, 19, 19)]; [downloadButton setBackgroundColor:[UIColor clearColor]]; [self.tableView cellForRowAtIndexPath:indexPath].accessoryView = downloadButton; //This sets the array } else { cell.accessoryType = UITableViewCellAccessoryNone; UIButton *downloadButton = [UIButton buttonWithType:UIButtonTypeCustom]; [downloadButton setTitle:@"" forState:UIControlStateNormal]; [downloadButton setFrame:CGRectMake(0, 0, 0, 0)]; [self.tableView cellForRowAtIndexPath:indexPath].accessoryView = downloadButton; } NSMutableData *data = [NSMutableData data]; NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; // Customize archiver here [archiver encodeObject:obj forKey:@"keyForYourArrayOfNSIndexPathObjects"]; [archiver finishEncoding]; [[NSUserDefaults standardUserDefaults] setObject:data forKey:@"keyForYourArrayOfNSIndexPathObjects"]; NSKeyedUnarchiver *unarchiver; unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData: [[NSUserDefaults standardUserDefaults] objectForKey:@"keyForYourArrayOfNSIndexPathObjects"]]; // Customize unarchiver here countryItemSelected = [unarchiver decodeObjectForKey:@"keyForYourArrayOfNSIndexPathObjects"]; [unarchiver finishDecoding]; NSLog(@"list of items %@", countryItemSelected); // Navigation logic may go here. Create and push another view controller. CitiesViewController *detailViewController = [[CitiesViewController alloc] init]; // ... // Pass the selected object to the new view controller. [self.navigationController pushViewController:detailViewController animated:YES]; } 

谢谢你的帮助

尝试下面的代码

 int rowNumber = [tableCategory numberOfRowsInSection:0]; for (int indexRow = 0 ; indexRow < rowNumber; indexRow++) { NSIndexPath *indexPath = [NSIndexPath indexPathForRow:indexRow inSection:0]; UITableViewCell *cell = [tableCategory cellForRowAtIndexPath:indexPath]; if (indexPath.row == <required indexpath row>) { //do what you want with cell } else { //do what you want with cell } } 

希望它可以帮助你

你的意思是什么“复选标记不取消”? 无论如何:你可以使用委托方法tableView:didDeselectRowAtIndexPath:当一个单元格被取消select时,将附件更改为不同的东西。

我刚刚得到这个权利,希望这会帮助你们!

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ for(int i=0; i<[tableView numberOfRowsInSection:0]; i++){ NSIndexPath *index = [NSIndexPath indexPathForRow:i inSection:0]; UITableViewCell *cell = [tableView cellForRowAtIndexPath:index]; if(index.row == indexPath.row){ NSLog(@"select"); }else{ NSLog(@"not select"); } } 

}