Re: [問題] 展開tableview中cell的方法

看板MacDev作者 (罪を憎んで人を憎まず)時間4年前 (2020/02/29 16:26), 4年前編輯推噓9(9030)
留言39則, 2人參與, 4年前最新討論串4/5 (看更多)
※ 引述《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對應不上就會掛掉 // 純手打有地方打錯請自行修正 ^^ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.116.161.187 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/MacDev/M.1582964780.A.E6C.html ※ 編輯: yuanruo (122.116.161.187 臺灣), 02/29/2020 16:27:16

03/02 01:43, 4年前 , 1F
謝謝分享 當貼文不只一則的話,
03/02 01:43, 1F

03/02 01:44, 4年前 , 2F
numberofRow 要設為所有貼文數加上所
03/02 01:44, 2F

03/02 01:45, 4年前 , 3F
有貼文的留言數。我這樣理解對嗎?
03/02 01:45, 3F

03/02 14:56, 4年前 , 4F
喔 我懂了 是貼文數+1沒錯 請問是每則
03/02 14:56, 4F

03/02 14:58, 4年前 , 5F
貼文視為一個section對嗎
03/02 14:58, 5F

03/02 17:18, 4年前 , 6F
目前能分section,但是每個section的
03/02 17:18, 6F

03/02 17:19, 4年前 , 7F
row == 0的時候,都會拿到datasource的
03/02 17:19, 7F

03/02 17:20, 4年前 , 8F
第一筆,所以現在整個tableview都是第
03/02 17:20, 8F

03/02 17:21, 4年前 , 9F
一筆
03/02 17:21, 9F

03/02 19:42, 4年前 , 10F
剛發現是我搞錯indexPath.section跟
03/02 19:42, 10F

03/02 19:43, 4年前 , 11F
indexPath.row 現在已經可以縮放
03/02 19:43, 11F

03/02 19:43, 4年前 , 12F
我是參考這個影片做的,但現在遇到一個
03/02 19:43, 12F

03/02 19:44, 4年前 , 13F
難題,我是想點cell內的button來展開
03/02 19:44, 13F

03/02 19:45, 4年前 , 14F
點擊貼文是跳到下一個畫面,
03/02 19:45, 14F

03/02 19:45, 4年前 , 15F
不知道能不能解?
03/02 19:45, 15F

03/02 19:46, 4年前 , 16F
03/02 19:46, 16F

03/02 21:27, 4年前 , 17F
button用tag記錄section 做原本貼文的事
03/02 21:27, 17F

03/04 01:28, 4年前 , 18F
我button後來有用protocol做出來了
03/04 01:28, 18F

03/04 01:29, 4年前 , 19F
03/04 01:29, 19F

03/04 01:30, 4年前 , 20F
請問y大對於展開後需要一欄可以輸入留
03/04 01:30, 20F

03/04 01:31, 4年前 , 21F
言跟送出留言的地方,是在section最後
03/04 01:31, 21F

03/04 01:32, 4年前 , 22F
多一個cell,還是用footer做呢?現在
03/04 01:32, 22F

03/04 01:33, 4年前 , 23F
footer市只有加高度讓貼文看起來間隔
03/04 01:33, 23F

03/04 01:33, 4年前 , 24F
大點
03/04 01:33, 24F

03/05 21:15, 4年前 , 25F
因為影片全用cell做~你沒法用footer
03/05 21:15, 25F

03/05 21:15, 4年前 , 26F
多加一個cell模擬最後一~像第一個一樣
03/05 21:15, 26F

03/08 14:07, 4年前 , 27F
請問y大知道展開留言後,能自動往下
03/08 14:07, 27F

03/08 14:07, 4年前 , 28F
滑到最下方留言的功能要怎麼做嗎?
03/08 14:07, 28F

03/08 19:02, 4年前 , 29F
取當前sention最後一個cell indexPath
03/08 19:02, 29F

03/08 19:04, 4年前 , 30F
tableview.scrollToRowAtxxxx(
03/08 19:04, 30F

03/08 19:10, 4年前 , 31F
但資料量大時reload後加個layoutIfNeeded
03/08 19:10, 31F

03/08 19:10, 4年前 , 32F
或是回到main queue執行滾動函式
03/08 19:10, 32F

03/10 11:45, 4年前 , 33F
目前遇到的問題是刪掉貼文後,再次展開
03/10 11:45, 33F

03/10 11:45, 4年前 , 34F
留言畫面(不同貼文)會重疊在一起
03/10 11:45, 34F

03/10 11:46, 4年前 , 35F
這部分要從哪個方向下手呢?
03/10 11:46, 35F

03/10 12:36, 4年前 , 36F
刪掉最上面一則貼文結果留言都往上跑
03/10 12:36, 36F

03/10 12:37, 4年前 , 37F
一則,第二則按下去會跑第三則的留言XD
03/10 12:37, 37F

03/10 16:02, 4年前 , 38F
看起來是datasource是外面data複製一
03/10 16:02, 38F

03/10 16:02, 4年前 , 39F
份,兩邊資料都刪除同樣index就好了
03/10 16:02, 39F
文章代碼(AID): #1UMY0ivi (MacDev)
文章代碼(AID): #1UMY0ivi (MacDev)