简体   繁体   中英

How to display checked images while scrolling the UITableView?

UITable view is working fine. when scrolling checked image is changed to uncheck. And also i need to take the particular checked image data in SAVE button Action.Can any body help me to solve this problem in prj.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:nil];
    if(cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
        cell.backgroundColor = [UIColor clearColor];

        cell.selectionStyle= UITableViewCellSelectionStyleNone;
    }

        UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(10,10, 20, 20)];
       [btn setImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal];        [cell addSubview:btn];
        btn.tag=4;
        forState:UIControlStateNormal];
        [btn addTarget:self action:@selector(checkBoxClicked:) forControlEvents:UIControlEventTouchUpInside];



        UILabel *lbl_name =[[UILabel alloc]initWithFrame:CGRectMake(35, 10, 100, 20)];
        lbl_name.text=[NSString stringWithFormat:@"%@",[[arr1 valueForKey:@"Name"]objectAtIndex:indexPath.row]];
        lbl_name.tag=5;
        lbl_name.textColor=[UIColor blackColor];
        [lbl_name setTextAlignment:NSTextAlignmentCenter];
        lbl_name.font=[UIFont systemFontOfSize:15];
        [cell addSubview:lbl_name];

    return cell;

}

-(void)checkBoxClicked:(id)sender
{
    UIButton *tappedButton = (UIButton*)sender;
    if([tappedButton.currentImage isEqual:[UIImage imageNamed:@"unchecked.png"]])
    {
        [sender  setImage:[UIImage imageNamed: @"checked.png"] forState:UIControlStateNormal];
    } else {
        [sender setImage:[UIImage imageNamed:@"unchecked.png"]forState:UIControlStateNormal];
    }
}

you use the deferent state to set image like this.

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:nil];
    if(cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
        cell.backgroundColor = [UIColor clearColor];

        cell.selectionStyle= UITableViewCellSelectionStyleNone;
    }

        UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(10,10, 20, 20)];
       [btn setImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal];  
        [sender  setImage:[UIImage imageNamed: @"checked.png"] forState:UIControlStateSelected]; 
        btn.selected=NO;  
        btn.tag=4;
        [btn addTarget:self action:@selector(checkBoxClicked:) forControlEvents:UIControlEventTouchUpInside];
        [cell addSubview:btn];

        UILabel *lbl_name =[[UILabel alloc]initWithFrame:CGRectMake(35, 10, 100, 20)];
        lbl_name.text=[NSString stringWithFormat:@"%@",[[arr1 valueForKey:@"Name"]objectAtIndex:indexPath.row]];
        lbl_name.tag=5;
        lbl_name.textColor=[UIColor blackColor];
        [lbl_name setTextAlignment:NSTextAlignmentCenter];
        lbl_name.font=[UIFont systemFontOfSize:15];
        [cell addSubview:lbl_name];

    return cell;

}

-(void)checkBoxClicked:(id)sender
{
    UIButton *tappedButton = (UIButton*)sender;
     if (tappedButton.isSelected) {
    tappedButton.selected=NO;
}
else
{
    tappedButton.selected=YES;
}
}

Take one array which is Use to store IndexValue of Selected button,

@property (nonatomic,retain) NSMutableArray *arySelected;

Initialize array in ViewDidLoad,

- (void)viewDidLoad {

    [super viewDidLoad]; 
    self.arySelected = [[NSMutableArray alloc] init];

}

Change Code of TableViewCell Delegate,

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        if(cell == nil)
        {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
            cell.backgroundColor = [UIColor clearColor];

            cell.selectionStyle= UITableViewCellSelectionStyleNone;
        }

        UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(10,10, 20, 20)];

        if (![arySelected containsObject:[NSString stringWithFormat:@"%ld",(long)indexPath.row]])
        {
            [btn  setImage:[UIImage imageNamed: @"checked.png"] forState:UIControlStateSelected];

        }
        else
        {
            [btn setImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal];

        }

        btn.tag=indexPath.row;
        [btn addTarget:self action:@selector(checkBoxClicked:) forControlEvents:UIControlEventTouchUpInside];
        [cell addSubview:btn];

        UILabel *lbl_name =[[UILabel alloc]initWithFrame:CGRectMake(35, 10, 100, 20)];
        lbl_name.text=[NSString stringWithFormat:@"%@",[[arr1 valueForKey:@"Name"]objectAtIndex:indexPath.row]];
        lbl_name.tag=5;
        lbl_name.textColor=[UIColor blackColor];
        [lbl_name setTextAlignment:NSTextAlignmentCenter];
        lbl_name.font=[UIFont systemFontOfSize:15];
        [cell addSubview:lbl_name];

        return cell;
}

// On your button Event,

-(void)checkBoxClicked:(id)sender
{
    sender.selected  = ! sender.selected;

    if (sender.selected)
    {
        [arySelected addObject:[NSString stringWithFormat:@"%ld",(long)sender.tag]];
    }
    else
    {
        [arySelected removeObject:[NSString stringWithFormat:@"%ld",(long)sender.tag]];
    }


    [self.tableView reloadData];
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM