时间:2021-05-02
思路
思路很简单,对模型数据操作或则控制界面显示
先看下json部分数据
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 "chapterdtolist": [{ "token": null, "id": 1295, "chaptername": "第一章", "parentid": 0, "chapterlevel": 0, "attachmenturl": "", "description": null, "startdatetimestamp": null, "enddatetimestamp": null, "startdate": 1490889600000, "enddate": 1491062400000, "browsecount": 0, "workid": null, "chapterstatus": 3, "hadread": 0, "subchapterlist": [{ "token": null, "id": 1296, "chaptername": "第一节", "parentid": 1295, "chapterlevel": 1, "attachmenturl": "", "description": null, "startdatetimestamp": null, "enddatetimestamp": null, "startdate": null, "enddate": null, "browsecount": 0, "workid": null, "chapterstatus": null, "hadread": 0, "subchapterlist": [], "classuserreadinfo": [] },这种数据对应的一般都是个tableview, 然后根据章节分开,最终界面如下:
分析
这里采用uitableviewstyleplain样式,chapterdtolist对应章,subchapterlist对应节。章的话我们使用headerview来做,节的话我们使用cell来做。然后只需要给headerview添加一个点击手势,点击的时候给对应的模型添加标识,从而去控制章节的收合。
方法一:
对模型数组进行操作,我们可以将返回的json数据转化为两个模型数组chapterlistarray和tempchapterlistarray,通过控制subchapterlist的count来实现。界面的模型数据统一使用tempchapterlistarray,展开与合并就等价于是否将“章数组“中的”节数组“赋值为nil
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 - (nsinteger)tableview:(uitableview *)tableview numberofrowsinsection:(nsinteger)section { yjtonlinetaskdetailmodel *onlinetaskdetailmodel = self.tempchapterlistarray[section]; return onlinetaskdetailmodel.subchapterlist.count; } - (uiview *)tableview:(uitableview *)tableview viewforheaderinsection:(nsinteger)section { yjtonlinechapetercell *headerview = [tableview dequeuereusablecellwithidentifier:onlinechapetercell]; yjtonlinetaskdetailmodel *onlinetaskdetailmodel = self.chapterlistarray[section]; headerview.backgroundcolor = [uicolor whitecolor]; headerview.onlinetaskdetailmodel = onlinetaskdetailmodel; if (section == 0) { headerview.tipslableheight.constant = 30; }else { headerview.tipslableheight.constant = 0; } [headerview whentapwithblock:^{ onlinetaskdetailmodel.isselected = !onlinetaskdetailmodel.isselected; yjtonlinetaskdetailmodel *detailmodel = self.tempchapterlistarray[section]; if (detailmodel.subchapterlist == nil) { detailmodel.subchapterlist = onlinetaskdetailmodel.subchapterlist; }else { detailmodel.subchapterlist = nil; } [self.tableview reloaddata]; }]; return headerview; }方法二:
上面的方法是通过控制模型数组来实现的,我们也可以采用控制界面的显示,从而达到我们的要求。既然我们在点击headview的时候已经标记过对应的模型数据是否展开,那么我们完全可以通过控制界面对应分组的个数来实现。当然也可以通过控制rowheight来到达效果。相比之下,该方法简单明了些。
? 1 2 3 4 5 6 7 8 - (nsinteger)tableview:(uitableview *)tableview numberofrowsinsection:(nsinteger)section { yjtonlinetaskdetailmodel *onlinetaskdetailmodel = self.chapterlistarray[section]; return onlinetaskdetailmodel.isselected ? onlinetaskdetailmodel.subchapterlist.count : 0; } [headerview whentapwithblock:^{ onlinetaskdetailmodel.isselected = !onlinetaskdetailmodel.isselected; [self.tableview reloaddata]; }];总结
以上所述是小编给大家介绍的ios 实现类似qq分组样式的两种方式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:http://www.cnblogs.com/chao8888/archive/2017/07/18/7200421.html
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
要与对方实现通讯,有udp和tcp两种方式,像我们的qq,就是udp和tcp两种方式共存的,不过现在qq正在逐步的转化为tcp服务器。下面是,用udp实现的聊天
iOS中用系统提供的API能实现能实现文件的上传与下载,分别有两种方式。NSURLConnection与NSURLSession。其中NSURLConnecti
前言:groupby函数后取到的是分组中的第一条数据,但是我们有时候需要取出各分组的最新一条,该怎么实现呢?本文提供两种实现方式。一、准备数据http://no
可实现类似于sql中的dateadd、datesub的功能两种获取日期的方式z=datetime.datetime(2016,12,5)z=datetime.d
在为jTool提供offset(获取当前节点位置)方法时,先后使用了两种方式进行实现,现整理出来以作记录。前后共使用了两种方式实现了该方法,这里将这两种方法分别