Reputation: 6614
I'm using the following code to add a custom icon to the UITableViewCellAccessoryCheckmark. The problem is that the cell checkmark doesn't deselect when another row is touched/selected
here's my code:
- (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];
}
thanks for any help
Upvotes: 1
Views: 480
Reputation: 13
I have just got this right, Hope this will help you guys!
- (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");
}
}
}
Upvotes: 0
Reputation: 935
Try the below code
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
}
}
Hope it may help you
Upvotes: 0
Reputation: 1739
What do you mean exactly with "the checkmark doesn't deselect"?
Anyway: You can use the delegate method tableView:didDeselectRowAtIndexPath:
and change the accessory to something different when a cell is de-selected.
Upvotes: 2