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