最新消息:文章中包含代码时,请遵守代码高亮规范!

iOS UITableView列表单选【原创】

iOS Alina 314浏览 0评论

最近项目中有用到UITableView列表单选的功能,首先的想法是用一个变量在didSelectRowAtIndexPath执行的时候记录选择的是哪一行,然后将列表reloadData,在cellForRowAtIndexPath中,如果当遍历到这一行时,将按钮的图片设置成选中的图片,其它的设置成未选中的,后来百度了一番有个方法感觉更好。

1.首先设置一个变量

NSIndexPath *lastIndexPath;

2.在cellForRowAtIndexPath中判断处理

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    NSInteger row = [indexPath row];
    NSInteger oldRow = [lastIndexPath row];
    if (row == oldRow && lastIndexPath!=nil) {
        [cell.checkButton setImage:[UIImage imageNamed:@"btn_checked"] forState:UIControlStateNormal];
    }else{
        [cell.checkButton setImage:[UIImage imageNamed:@"btn_unchecked"] forState:UIControlStateNormal];
    }
    
    return cell;
}

3.在didSelectRowAtIndexPath中用lastIndexPath记录选择的是哪一行

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSInteger newRow = [indexPath row];
    
    NSInteger oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
    
    if (newRow != oldRow) {
        
        CheckTableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath];
        
        [newCell.checkButton setImage:[UIImage imageNamed:@"btn_checked"] forState:UIControlStateNormal];
        
        CheckTableViewCell *oldCell = [tableView cellForRowAtIndexPath:lastIndexPath];
        
        [oldCell.checkButton setImage:[UIImage imageNamed:@"btn_unchecked"] forState:UIControlStateNormal];
        
        lastIndexPath = indexPath;
        
    }
    
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

效果图如下:

 

 

 

 

 

 

 

 

 

这样就实现了UITableView列表单选功能

转载时请注明出处及相应链接,本文永久地址:http://blog.it985.com/21698.html


pay_weixin
pay_weixin
微信打赏
pay_weixin
支付宝打赏
感谢您对作者Alina的打赏,我们会更加努力!    如果您想成为作者,请点我

您必须 登录 才能发表评论!