前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS开发——UITableView勾选效果

iOS开发——UITableView勾选效果

作者头像
Originalee
发布2018-08-30 10:36:19
1.6K0
发布2018-08-30 10:36:19
举报
文章被收录于专栏:编程之旅编程之旅

今天整理了一下项目中常用的一些控件功能,整理一些UI效果来总结一下。

如今的APP开发中,UITableView是最常用的控件之一,而UITableView中有个很常见的效果就是勾选效果,这个效果是由UITableViewCell中的accessoryType属性来决定的。

accessoryType中的变量是一个枚举值UITableViewCellAccessoryType,让我们来看一下其中包含的东西。

typedef NS_ENUM(NSInteger, UITableViewCellAccessoryType) { UITableViewCellAccessoryNone, // 不显示任何效果 UITableViewCellAccessoryDisclosureIndicator, // 常用的V形引导图标 UITableViewCellAccessoryDetailDisclosureButton //信息提示+V形引导图标 UITableViewCellAccessoryCheckmark, // 勾选效果 UITableViewCellAccessoryDetailButton //信息图标 };

代码语言:javascript
复制
这几个效果我已经罗列在上面了,今天我们要探讨的,就是```UITableViewCellAccessoryCheckmark```勾选效果。我们要实现的,就是单选一个列表中的信息。

有以下几个注意点:

- 首先在```- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath``` 方法中实现判断被选中的单元格的功能。记录下之前选择的单元格,并且实时更新。

- 其次,解决单元格的复用问题。不然当单元格复用时,会显示多个勾选的BUG。看了一下网上分享的很多的方法,都没有解决单元格复用的问题,或者问的很笼统。

好了,解释的差不多,下面来上代码。

首先我们先声明一个变量,用来存储被选择的行数的标志

@property (nonatomic, strong) NSIndexPath *selectPath; //存放被点击的哪一行的标志

代码语言:javascript
复制
之后我们实现```- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath```这个代理方法
  • (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ int newRow = (int)[indexPath row]; int oldRow = (int)(_selectPath != nil) ? (int)[_selectPath row]:-1; if (newRow != oldRow) { UITableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath]; newCell.accessoryType = UITableViewCellAccessoryCheckmark; UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:_selectPath]; oldCell.accessoryType = UITableViewCellAccessoryNone; _selectPath = [indexPath copy]; } [tableView deselectRowAtIndexPath:indexPath animated:YES]; }
代码语言:javascript
复制
最后看一下怎么在```- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath```中添加一段代码,解决复用问题

if (_selectPath == indexPath) { cell.accessoryType = UITableViewCellAccessoryCheckmark; }else{ cell.accessoryType = UITableViewCellAccessoryNone; } cell.roomType = _dataSource[indexPath.row];

代码语言:javascript
复制
至此,单选效果就已经完成,并且不会有单元格复用的问题,代码很简单,也不想过多解释了,不清楚的可以接着问.
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.05.11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档