Вопрос

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.

Это было полезно?

Решение 3

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 !!!

Другие советы

accessoryType type is of enum UITableViewCellAccessoryType, by definition it will not accept multiple values as it not bitwise enum. So, you have to choose one and mimic the other by custom code.

I'd recommend using the UITableViewCellAccessoryCheckmark accessory type on the tableview and adding a "Detail Disclosure" button to the cell. Unfortunately you can't do exactly what you're looking for, but this is the cleanest alternative approach that I've found.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top