tableviewcell折叠问题,(类似qq列表展开形式) 多个cell同时展开,OC版 和 Swift
之前没有用到过这块,但是今天看到,就试了试,但是发现,网上的有的方法不能多个cell同时展开,只能一个一个的展开。
我就尝试用用数组记录展开的标记的方法,功能实现了,
直接上代码:
//
// ViewController.m
// 折叠tableview-Test
//
// Created by abc on 16/7/26.
// Copyright © 2016年 LiuWenqiang. All rights reserved.
// #import "ViewController.h" #define ALLWIDTH [UIScreen mainScreen].bounds.size.width
#define ALLHEIGHT [UIScreen mainScreen].bounds.size.height @interface ViewController ()<UITableViewDelegate,UITableViewDataSource>
{
UITableView*tableview;
NSArray *dataArr;
NSMutableArray *isOpenArr; }
@end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; tableview = [[UITableView alloc]initWithFrame:CGRectMake(, , ALLWIDTH, ALLHEIGHT-)];
tableview.delegate =self;
tableview.dataSource = self;
tableview.tableFooterView = [[UIView alloc]init];
[self.view addSubview:tableview]; dataArr = [NSArray array];
dataArr = @[@"呵呵",@"哈哈",@"嗯嗯",@"呃呃",@"很好"]; isOpenArr = [NSMutableArray array]; for (int i =; i< dataArr.count; i++) { [isOpenArr addObject:@""];
} }
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return ;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if([isOpenArr[section] isEqualToString:@""])
{
return dataArr.count;
}else{
return ;
}
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *cellstr = @"cell";
UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellstr];
if (!cell) {
cell = [tableview dequeueReusableCellWithIdentifier:cellstr forIndexPath:indexPath];
} cell.textLabel.text = dataArr[indexPath.row]; return cell; } -(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return ;
} -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIView *view =[[UIView alloc]init];
UILabel *lable = [[UILabel alloc]initWithFrame:CGRectMake(, ,ALLWIDTH, )];
lable.text = [NSString stringWithFormat:@"------------第%ld组---------",(long)section];
lable.textColor = [UIColor redColor];
[view addSubview:lable]; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(topgesture:)];
[view addGestureRecognizer:tap]; view.tag = section;
return view; }
//在组头上添加点击手势
-(void)topgesture:(UITapGestureRecognizer*)tap
{
NSInteger index = tap.view.tag; if ([isOpenArr[index] isEqualToString:@""]) { [isOpenArr replaceObjectAtIndex:index withObject:@""]; }else{
[isOpenArr replaceObjectAtIndex:index withObject:@""]; }
[tableview reloadData]; } -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableview deselectRowAtIndexPath:indexPath animated:YES];
NSLog(@"------================--%ld-----",indexPath.row);
} @end
自己最近几天正在学习swifit,于是就试着用swift 写了一遍,
//
// ViewController.swift
// 测试--Swift--Test
//
// Created by abc on 16/7/26.
// Copyright © 2016年 LiuWenqiang. All rights reserved.
// import UIKit class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { let ALLwidth = UIScreen.mainScreen().bounds.width
let ALLheight = UIScreen.mainScreen().bounds.height var tableview:UITableView = UITableView()
var DataArr: NSMutableArray = NSMutableArray() var selectindex:NSMutableArray = NSMutableArray() override func viewDidLoad() {
super.viewDidLoad() tableview.frame = CGRectMake(, , ALLwidth, ALLheight)
tableview.delegate = self
tableview.dataSource = self
self.view.addSubview(tableview) DataArr = ["第一行","第二行","第三行","第四行"] for _ in DataArr { selectindex.addObject("")
} } func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return
} func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
if selectindex[section] .isEqual("") { return DataArr.count }else{ return
} }
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let indenfer = "cell"
let cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: indenfer) cell.textLabel?.text = DataArr[indexPath.row] as? String return cell
} func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return
}
func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { let str:String = "-----------" + "\(section)" + "-------------" return str } func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let headerview:UIView = UIView()
headerview.frame = CGRectMake(, , ALLwidth,)
headerview.backgroundColor = UIColor.grayColor()
let lable:UILabel = UILabel()
lable.frame = headerview.bounds
lable.text = "-----------" + "第\(section)组" + "-------------"
lable.textColor = UIColor.redColor()
headerview.addSubview(lable) let tap = UITapGestureRecognizer.init(target: self, action:#selector(ViewController.clicktap(_:)))
headerview.tag = section
headerview.addGestureRecognizer(tap) return headerview
} func clicktap(tap:UITapGestureRecognizer){ print("=====\(tap.view?.tag)")
let index:Int = tap.view!.tag if selectindex[index] .isEqual(""){ selectindex.replaceObjectAtIndex(index, withObject: "") }else{ selectindex.replaceObjectAtIndex(index, withObject: "")
} tableview .reloadData() } override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
} }
tableviewcell折叠问题,(类似qq列表展开形式) 多个cell同时展开,OC版 和 Swift的更多相关文章
- iOS tableViewCell 在cell赋值、网络加载照片位置偏移大小错乱,做一个类似qq列表的tableview 更新3
更新3: 问题 加载慢!(一时间给的处理负载过大,要分散)在下载图片,判断状态后 对每个cell对图片灰置图片处理保存,影响了主线程的操作 :上拉加载时,无法上下滑动tableview 无法点击cel ...
- android开发之ExpandableListView的使用,实现类似QQ好友列表
由于工作需要,今天简单研究了一下ExpandableListView,做了一个类似QQ列表的Demo,和大家分享一下. 效果图如下: 先来看看主布局文件: <RelativeLayout xml ...
- 实现类似QQ的折叠效果
// 主要核心是点击自定义header来展开和收起每一组里面的cell,模型里面应该有isShow此属性来记录开展还是收起. // ViewController.m// 实现类似QQ的折叠效果/ ...
- Android ExpandableListView BaseExpandableListAdapter (类似QQ分组列表)
分组列表视图(ExpandableListView) 和ListView不同的是它是一个两级的滚动列表视图,每一个组可以展开,显示一些子项,类似于QQ列表,这些项目来至于ExpandableListA ...
- 使用plupload做一个类似qq邮箱附件上传的效果
公司项目中使用的框架是springmvc+hibernate+spring,目前需要做一个类似qq邮箱附件上传的功能,暂时只是上传小类型的附件 处理过程和解决方案都需要添加附件,处理过程和解决方案都可 ...
- [C# 网络编程系列]专题九:实现类似QQ的即时通信程序
转自:http://www.cnblogs.com/zhili/archive/2012/09/23/2666987.html 引言: 前面专题中介绍了UDP.TCP和P2P编程,并且通过一些小的示例 ...
- .net winForm 实现类似qq 弹出新闻
.net winForm 实现类似qq 弹出新闻 一.背景: echong 之前一直用 公司大牛c语言写的一个弹出托管,前几天写东西的时候发现com调用不是那么好使.而手头上写的这个东西又是.ne ...
- jQuery实现的3个基础案例(仿QQ列表分组,二级联动下拉框,模拟员工信息管理系统)
1.仿QQ列表分组 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type&quo ...
- 详解C# 网络编程系列:实现类似QQ的即时通信程序
https://www.jb51.net/article/101289.htm 引言: 前面专题中介绍了UDP.TCP和P2P编程,并且通过一些小的示例来让大家更好的理解它们的工作原理以及怎样.Net ...
随机推荐
- 洛谷P3145 [USACO16OPEN]分割田地Splitting the Field
P3145 [USACO16OPEN]分割田地Splitting the Field 题目描述 Farmer John's NN cows (3 \leq N \leq 50,0003≤N≤50,00 ...
- 关于在SSM框架下使用PageHelper
首先,如果各位在这块配置和代码有什么问题欢迎说出来,我也会尽自己最大的能力帮大家解答 这些代码我都是写在一个小项目里的,项目的github地址为:https://github.com/Albert-B ...
- 为什么要把系统拆分成分布式的,为啥要用Dubbo?
阅读本文大概需要 6 分钟. 作者:yanglbme 1.面试题 为什么要进行系统拆分?如何进行系统拆分?拆分后不用 dubbo 可以吗? 2.面试官心里分析 从这个问题开始就进行分布式系统环节了,好 ...
- bzoj5506:[gzoi2019]旅行者
传送门 正反两边dijkstra染色,然后枚举一下边,求出最小值就好啦 代码: #include<cstdio> #include<iostream> #include< ...
- 判断文件是否存在 local/hdfs
在Linux文件系统中,我们可以使用下面的Shell脚本判断某个文件是否存在: # 这里的-f参数判断$file是否存在 if [ ! -f "$file" ]; then ech ...
- mysql主从复制之同步部分库表
这里以mariadb为例,和mysql一样的配置 系统:centos7 主服务器:192.168.0.1:3305(两台服务器都做过时间同步) 从服务器:192.168.0.2:3306(两台服务器都 ...
- LeetCode 260 Single Number III 数组中除了两个数外,其他的数都出现了两次,找出这两个只出现一次的数
Given an array of numbers nums, in which exactly two elements appear only once and all the other ele ...
- Zookeeper崩溃恢复过程(Leader选举)
1. 崩溃恢复 a). leader选择过程可以保证新leader是ZXID最大的节点 b). ZAB协议确保丢弃那些只在leader上被提出的事务,场景 leader发出PROPOSAL收到ACK, ...
- Spring4.x、SpringMVC和DButils整合
tomcat 8.Spring 4.X.JDK1.8 需要jar包: 1)日志组件:log4j # debug < info < warn < error log4j.rootLog ...
- Python list, dict, set, tuple
list方法 append: 添加一个新的元素到末尾 extend: 扩展元素 insert: 在任何位置插入元素 pop: 弹出末尾的元素 remove: remove first occurren ...