iostableviewcheckmarkdisclosure

tableview with checkmark and detail disclosure together


I'm making a tableview with multiple row selected option. So, I used the checkmark accessory type action. I also require to edit/rename the text in the selected row.

Basically, I need to put checkmark (checkbox) on the left side and detail disclosure on the right side of the cell, both functional.

Below code is for checkmark that i have, currently checkmark appears on the right side of the cell.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Navigation logic may go here. Create and push another view controller.

    TSIPAppDelegate *appDelegate = (TSIPAppDelegate *)[[UIApplication sharedApplication]delegate];
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    NSString *cellText = cell.textLabel.text;
    if (cell.accessoryType==UITableViewCellAccessoryNone)
    {
      cell.accessoryType=UITableViewCellAccessoryCheckmark;
      appDelegate.selectedFile = cellText;
      if (prevSP!=indexPath.row) {
        cell=[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:prevSP inSection:0]];
        cell.accessoryType=UITableViewCellAccessoryNone;
        prevSP=indexPath.row;
      }
    }
    else if (prevSP!=indexPath.row){
      cell.accessoryType=UITableViewCellAccessoryNone;
    }
}

Any suggestions, please?

When a row selected, checkmark should be enabled/disabled AND disclosure button selected, it should open a new view for editing the selected row.


Solution

  • This is sample code which i have used in one of my app

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    static NSString *CellIdentifier = @"Cell";
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    
    {
    
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        cell.textLabel.text=[NSString stringWithFormat:@"%@",[cellarray objectAtIndex:indexPath.row]];
        cell.textLabel.textColor=[UIColor blackColor] ;
        cell.textLabel.tag=indexPath.row;
        cell.textLabel.font=[UIFont fontWithName:@"HelveticaNeue-Bold" size:15];
        // cell.textLabel.highlightedTextColor=[UIColor colorWithRed:242.0f/255.0f green:104.0f/255.0f blue:42.0f/255.0f alpha:1] ;
        cell.selectionStyle=UITableViewCellSelectionStyleNone;
    
    
    }
    
    UIImageView *ima=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"tick.png"]];
    ima.frame=CGRectMake(280, 15, 14, 14);
    ima.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin |UIViewAutoresizingFlexibleRightMargin;
    
    int row = [indexPath row];
    //cell.accessoryType = (row == selectedRow) ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;
    cell.textLabel.textColor= (row == selectedRow) ? [UIColor colorWithRed:242.0f/255.0f green:104.0f/255.0f blue:42.0f/255.0f alpha:1] : [UIColor blackColor] ;
    if (row==selectedRow) {
    
        [cell.contentView addSubview:ima];
    
    }
    
    UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Background.png"]];
    [tempImageView setFrame:tableView.frame];
    
    tableView.backgroundView = tempImageView;
    [tempImageView release];
    return cell;
    }
    
    
    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    
    selectedRow = [indexPath row]; // selected row is of type int  declared in .h
    
    [tableView reloadData];
    
    
    }
    

    This code will have only one checkmark in entire tableView.. You can modify it to have multiple checkmark in that

    Hope this helps !!!