美文网首页IOS 视图跳转/层级相关的知识
iOS TableView的单元格实现单选功能

iOS TableView的单元格实现单选功能

作者: Spring_Lau | 来源:发表于2016-07-02 13:30 被阅读6214次

我最近在做的一个项目中遇到了单元格单选的功能,当时我的第一想法是在单元格上添加按钮,通过点击改变按钮的背景图片并记录最后一次点击的indexPath,因为之前的项目中遇到过多选的功能,用这种方法出现了复用的问题,也就是选择某个单元格滑动表格时没点击的单元格也被选中了,所以当时就很担心单选的时候出现同样的问题,果不其然,只显示最后一个单元格被选中。然后我找到了这种方法,总结了一下

这个功能的实现只需要在两个方法中code即可

首选我们公开一个属性

@property(nonatomic,strong)NSIndexPath *lastPath;

主要是用来接收用户上一次所选的cell的indexpath

第一步:在cellForRowAtIndexPath:方法中实现如下代码

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

NSInteger row = [indexPath row];

NSInteger oldRow = [lastPath row];

if (row == oldRow && lastPath!=nil) {

//这个是系统中对勾的那种选择框

cell.accessoryType = UITableViewCellAccessoryCheckmark;

}else{

cell.accessoryType = UITableViewCellAccessoryNone;

}

}

第二步:在didSelectRowAtIndexPath:中实现如下代码

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

//这里最好不要声明int类型的,个人建议

NSInteger newRow = [indexPath row];

NSInteger oldRow = (self .lastPath !=nil)?[self .lastPath row]:-1;

if (newRow != oldRow) {

UITableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath];

newCell.accessoryType = UITableViewCellAccessoryCheckmark;

UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:lastPath];

oldCell.accessoryType = UITableViewCellAccessoryNone;

self .lastPath = indexPath;

}

[tableView deselectRowAtIndexPath:indexPath animated:YES];

}

Ok,可以收工了,这样实现之后的效果是每次单击一个cell会做一个选中的标志并且托动表视图时也不会出现checkmark的复用

不过,根据项目需求,可能会需要定义一个按钮,自定义选择框的图片,这也很简单,只需要将上面的代码改一下就ok了:

在cellForRowAtIndexPath:中如下修改

if (row == oldRow && self.lastPath!=nil) {

[cell . selectBtn setBackgroundImage:[UIImage imageNamed:@"选中点"] forState:UIControlStateNormal];

}else{

[cell . selectBtn setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];

}

在didSelectRowAtIndexPath:中如下修改

if (newRow != oldRow) {

self.cell = [tableView cellForRowAtIndexPath:indexPath];

[self .cell.selectBtn setBackgroundImage:[UIImage imageNamed:@"选中点"] forState:UIControlStateNormal];

self.cell = [tableView cellForRowAtIndexPath:self .lastPath];

[self .cell.selectBtn setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];

self .lastPath = indexPath;

}

相关文章

  • iOS TableView的单元格实现单选功能

    我最近在做的一个项目中遇到了单元格单选的功能,当时我的第一想法是在单元格上添加按钮,通过点击改变按钮的背景图片并记...

  • iOS TableView的单元格实现单选功能

    我最近在做的一个项目中遇到了单元格单选的功能,当时我的第一想法是在单元格上添加按钮,通过点击改变按钮的背景图片并记...

  • iOS tableView实现单选和多选的实例代码

    tableView的单选需求,demo实现了简单的单选和多选两个功能,效果图: 1:首先实现下单选 1:使用一个变...

  • ios tableView实现单选

    为了使代码结构更加合理、精简,本人将M层和V层进行了合并,本文主要介绍tableView的单选功能实现和MV合并,...

  • tableView中cell的单选或者复选

    iOS开发中,有时候需要实现tableView中cell的单选或者复选,这里举例说明了怎么简单的实现 首先自己创建...

  • ios tableview 单选

    1 声明一个标示 selectindex 包含selection和row 2 设置默认选中第一个 3 cell...

  • ios tableview 单选

    1 声明一个标示 selectindex 包含selection和row 2 设置默认选中第一个 3 cell f...

  • iOS tableView实现单选和多选

    今天在项目中遇到了tableView的单选需求,现在总结一下,用一个简单的demo实现了简单的单选和多选两个功能....

  • iOS tableView实现单选和多选

    今天在项目中遇到了tableView的单选需求,现在总结一下,用一个简单的demo实现了简单的单选和多选两个功能....

  • 跟着斯坦福白胡子老头学Alert

    iOS使用UIAlertController类实现基本的对话框、单选菜单功能,可以显示标题、内容、选项、按钮、输入...

网友评论

  • 6bbba3902a7a:如果有默认值呢,然后在点击cell的时候,怎么去掉默认的值呢
  • 6bbba3902a7a:如果需要一个默认值呢,点击cell的时候,怎么把默认的取消呢
  • 小桥流水青山碧海:第二次选择 直接报错了
    NSInteger oldRow = (_lastPath !=nil)?[_lastPath row]:-1;Thread 1: EXC_BAD_ACCESS (code=1, address=0xe16de7ac)
  • 俊俊吖:你可以给cell的赋值Model赋值根据这个值来判断选中状态:blush:
  • 俊俊吖:其实这么做是不对的,你没有考虑到cell的重用问题,当你向上拉时或者向下拉时cell重用对勾会消失
    大魔导师刘秀:@我叫山鸡_ 自定义cell,在prepareForReuse()方法中将选中状态都取消
    我叫山鸡_:那应该怎么解决啊
  • 这个姑凉儿:写的不错
  • itonny:self .cell.selectBtn 这个按钮哪里来的?
  • luroad:请问有相关demo吗,给个链接
    3870d183d931:有一个是系统的选中状态,下面是告诉你的方法,是自定义的一个选中状态,也就是勾选的图标
    系统的是会出现向左滑动的效果。
    luroad:@小萌同学 写的出现了一些问题,进入页面不点击第一个会出现两个选中
    3870d183d931:这么详细还需要demo?

本文标题:iOS TableView的单元格实现单选功能

本文链接:https://www.haomeiwen.com/subject/dreqjttx.html