hanumanDev
hanumanDev

Reputation: 6614

How to remove a custom icon to the UITableViewCellAccessoryCheckmark when another table row is selected

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

Answers (3)

GaaraMadara
GaaraMadara

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

Exploring
Exploring

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

SAE
SAE

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

Related Questions