上节我们讲到如何展示好友信息

iOS TableView实现QQ好友列表(二)

http://blog.csdn.net/lwjok2007/article/details/46549111

接下来我们将分组点击的时候折叠起来。

首先新建一个可变字典用来存储当前列表是否展示

    NSMutableArray *selectedArr;//控制列表是否被打开
    selectedArr=[[NSMutableArray alloc]init];

根据前两节所讲,我们讲分组名称放在section的header上了,但是Header 不像cell一样有点击方法

此时我们可以考虑给header上添加一个button来实现点击的时候打开列表和关闭列表

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{UIView *view=[[UIView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 30)];view.backgroundColor=[UIColor whiteColor];UILabel *titleLabel=[[UILabel alloc]initWithFrame:CGRectMake(30, 5, SCREEN_WIDTH, 30)];titleLabel.text=[titleArray objectAtIndex:section];[view addSubview:titleLabel];UIImageView *imageView=[[UIImageView alloc]initWithFrame:CGRectMake(5, 5, 20, 20)];imageView.tag=20000+section;imageView.image=[UIImage imageNamed:@"arrow_down.png"];[view addSubview:imageView];//添加一个button 用来监听点击分组,实现分组的展开关闭。UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom];btn.frame=CGRectMake(0, 0, SCREEN_WIDTH, 50);btn.tag=10000+section;[btn addTarget:self action:@selector(btnOpenList:) forControlEvents:UIControlEventTouchDown];return view;
}

此处设置button的tag为10000+section  是为了 保证通过button 的 tag 识别出当前点击的是哪个分组(没有直接设置成section 而是设置为10000+section  是为了保证左侧的图片也能通过tag确定是哪个分组的,所以他的tag被设置为 20000+section  这样就保证了 section不超过10000的时候两个都可以通过tag确定,而且不相互影响)

实现刚才添加的button的方法

-(void)btnOpenList:(UIButton *)sender
{NSString *string = [NSString stringWithFormat:@"%d",sender.tag-10000];//数组selectedArr里面存的数据和表头想对应,方便以后做比较if ([selectedArr containsObject:string]){[selectedArr removeObject:string];}else{[selectedArr addObject:string];}[tableViewList reloadData];
}

上边的方法是在点击了分组之后跟新一下 selectedArr数组,

下来我们就实现table跟新的时候  读取selectedArr 决定是否展开分组

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{NSString *indexStr = [NSString stringWithFormat:@"%d",indexPath.section];NSString *str=[titleArray objectAtIndex:indexPath.section];NSArray *arr=[dataDic objectForKey:str];static NSString *CellIdentifier = @"UserCell";UserTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];cell=nil;if (cell == nil) {cell = [[UserTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];cell.selectionStyle = UITableViewCellSelectionStyleGray;}//只需要给当前分组展开的section 添加用户信息即可if ([selectedArr containsObject:indexStr]) {NSDictionary *dic=[arr objectAtIndex:indexPath.row];cell.headerphoto.image=[UIImage imageNamed:[dic valueForKey:@"usericon"]];cell.nameLabel.text=[dic valueForKey:@"name"];cell.isOnLine.text=@"[在线]";cell.introductionLabel.text=@"无动态";cell.networkLabel.text=@"4G";}return cell;}

到此位置 展开关闭可以了 但是左侧的剪头还没有变换过来(展开的时候为向下的剪头,关闭时为朝右的剪头)

此时 我们需要调整方法

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{UIView *view=[[UIView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 30)];view.backgroundColor=[UIColor whiteColor];UILabel *titleLabel=[[UILabel alloc]initWithFrame:CGRectMake(30, 5, SCREEN_WIDTH, 30)];titleLabel.text=[titleArray objectAtIndex:section];[view addSubview:titleLabel];UIImageView *imageView=[[UIImageView alloc]initWithFrame:CGRectMake(5, 5, 20, 20)];imageView.tag=20000+section;//更具当前是否展开设置图片NSString *string = [NSString stringWithFormat:@"%d",section];if ([selectedArr containsObject:string]) {imageView.image=[UIImage imageNamed:@"arrow_down.png"];}else{imageView.image=[UIImage imageNamed:@"arrow_right.png"];}[view addSubview:imageView];//添加一个button 用来监听点击分组,实现分组的展开关闭。UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom];btn.frame=CGRectMake(0, 0, SCREEN_WIDTH, 50);btn.tag=10000+section;[btn addTarget:self action:@selector(btnOpenList:) forControlEvents:UIControlEventTouchDown];[view addSubview:btn];return view;
}

最终效果如下

到此为止基本上完成了 模仿qq好友列表的简单功能。

源代码将上传到qq群空间

苹果开发群 :414319235  欢迎加入  欢迎讨论问题

iOS TableView实现QQ好友列表(三)相关推荐

  1. iOS TableView实现QQ好友列表(二)

    上节:iOS TableView实现QQ好友列表(一) http://blog.csdn.net/lwjok2007/article/details/46534123 上一节实现了简单的好友列表,但是 ...

  2. iOS之仿QQ好友列表展开收缩效果的实现

    使用UICollectionView实现 思路 很明显整体它是一个列表,它的分组是一个列表,它里面的好友列表也是一个列表,所以就可以使用组头来设置分组列表,使用cell设置好友列表: 当点击组头的时候 ...

  3. tableView练习 -- QQ好友列表

    LWTViewController.h // // LWTViewController.h // tableView练习 -- QQ好友列表 // // Created by apple on 14- ...

  4. TableView实现QQ好友列表效果

    概述:本文是黑马程序员UI视频教程第九天,QQ好友列表案例的总结 该案例中主要涉及的知识点有:改变图片在UIButton中的平铺方式.UITableViewHeaderFooterView.设置按钮中 ...

  5. iOS开发中QQ好友列表下拉显示全部好友实现思路

    在QQ的好友页面有一个点击各个分类,然后展示分类中所有好友的效果,今天就说一说实现该效果的一个思路. 这个页面肯定是需要一个UITableView的,在tableview的代理方法中要实现分区的一个方 ...

  6. iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一)

    iOS开发UI篇-使用UItableview完成一个简单的QQ好友列表(一) 一.项目结构和plist文件 二.实现代码 1.说明: 主控制器直接继承UITableViewController // ...

  7. iOS开发-QQ好友列表展示

    那么今天给同学写了一个QQ好友列表展示的Demo,涉及很多的内部细节以及高度封装自定义的cell和自定义view,那么内部所用知识和细节全部呈现在代码和注释中,那么废话不多说直接上代码,先看效果图! ...

  8. 自动抓取QQ好友列表?Windows UIA教你轻松实现

    目录:导读 引言 选择Windows UIA框架进行自动化测试的原因 查找窗口 读取QQ软件的好友列表 结语 引言 每个使用QQ的人都有自己的好友列表,但是如果你想要查看所有好友信息,手动一个个点击会 ...

  9. 14_自定义ItemDecoration实现qq好友列表分组效果

    14_自定义ItemDecoration实现qq好友列表分组效果 一.先上效果 二.RecyclerView实现简单分组 RecyclerView比较常规的用法,显示多item布局,直接上代码: pu ...

最新文章

  1. 一款可视化的在线制作H5
  2. Codeforces Round #627 (Div. 3) E. Sleeping Schedule dp
  3. 十万字cpp成神总结-看完月薪25k
  4. c4d流体插件_(图文+视频)C4D野教程:TFD、XP和RF三大流体插件协作案例
  5. C++工作笔记-for与foreach之间的初步比较(反汇编初步窥探)
  6. base64位转成二进制流_你知道 Base64 编码中的 64 指的是什么吗?
  7. 鸿蒙初开踏青时主要内容,鸿蒙初开踏青时
  8. python 最优解 ma_python遗传算法求最优解
  9. LiveGBS国标GB/T28181视频平台获取海康大华宇视摄像机设备通道视频流直播地址 HLS/HTTP-FLV/WS-FLV/WebRTC/RTMP/RTSP直播流地址示例
  10. 市场调研中的定性/定量分析
  11. 车上控制器中英文对照
  12. 利用高德云图开发附近的人功能
  13. 云存储解决方案-阿里云OSS
  14. 数据湖架构、战略和分析的8大错误认知
  15. 中信银行--面试记录
  16. ue4的GamePlay框架
  17. C++ this指针的理解和作用
  18. QQ音乐 for Mac(腾讯音乐客户端)
  19. 浅谈流媒体技术在无线网络中的应用
  20. 视频解读:数据化闭环洞察消费者

热门文章

  1. 房市静心贴:蛋蛋读NVMe之三
  2. JS实现对联广告和弹窗广告代码,可同时关闭不随屏幕滚动
  3. Java中自然对数E怎么调用
  4. Contact Form 7邮件发送失败的解决办法 - 风沙渡
  5. 使用笔记本电脑需要注意的问题
  6. 操作系统-操作系统简介
  7. python大学考试题型这一篇就够了
  8. 接口中的方法需要加上 public abstract 修饰吗
  9. 我读《精进》——05 修炼思维
  10. Git 修改Git的提交方式 https - ssh