Re: [问题] 展开tableview中cell的方法

楼主: yuanruo (罪を憎んで人を憎まず)   2020-02-29 16:26:16
※ 引述《frank61003 (驼龟)》之铭言:
: 想请问大家
: 如果想做一个类似涂鸭墙的TableView
: 现在是把每个cell设置成一则贴文的样式
: 那点击留言后弹开留言需要用什么元件写
: 因为每则贴文的留言数都不一样
: 是要在cell里面再放个完全展开且不能滑动的tableView吗
: 还是有其他元件可以达成这种元件数量未定的功能
: 谢谢大家
第一种
你可以设一个资料结构 比如
struct CellData {
let content: String //贴文内容
/* 头像,时间随你加 或是你设另一个资夹结构都包起来也行 */
let isExpand: Bool
let expandCellData: [留言的资料结构]
let sention: Int
}
然后api回来后自己组成上列格式,再numberofRow里 总数要取expandCellData + 1
然后cell for row , section,indexpath都为0为贴文cell 其余留言cell
然后再留言cell判断isExpand是true才塞资料进去
heightForRow也要判断isExpand == false 为 0
再didSelectRow 里判断如果indexPath.section == 0 时
更改当前section下的CellData 的isExpand状态
可以用enumerated().map 同时取到idx 和 资料
ex
if indexPath.row == 0 {
let newData = myData.enumerated().map { (idx, data)
if section == indexPath.section {
data.isExpand.toggle() //忘了可不可以直接改 不行就先取出来
return data
}else {
return data
}
}
self.myData = newData
tableView.reloadData()
}
这样可以点击贴文展开收合下面留言,多个也没问题
第二种方法,不过通常是很旧的写法, 找到的范例几乎都是Objc版本的
也就是准备两个dataSource , 一开始全都只显示SentionHeader
点击后触发action 把cell insert到相对应的section下面
要收合时再对应的section index delete掉相应section内的cell资料
通常tableView的style会设成group
这方法麻烦的是insert和delete时如果跟原本datasource对应不上就会挂掉
// 纯手打有地方打错请自行修正 ^^

Links booklink

Contact Us: admin [ a t ] ucptt.com