原來思路是這樣的:圖中紅框是我們的訊息列表,是乙個tableview,每個訊息是乙個cell,每次接收到一條訊息立刻新增到資料陣列中,同時重新整理tableview,滾動到底部。
原來的**是這樣寫的:
[chatdataarray addobject:chatmodel];
[chattable reloaddata];
nsindexpath *myindexpath = [nsindexpath indexpathforrow: chatdataarray.count - 1 insection:0];
[chattable selectrowatindexpath:myindexpath animated:yes scrollposition:uitableviewscrollpositionbottom];
但是這樣寫有乙個很大的問題就是:每次接受到訊息時新增到資料陣列中,同時重新整理tableview的時候,整個tableview會閃爍一下,這個問題困擾我好久不知道怎麼解決,期間用過很多辦法(先隱藏再重新整理,非同步重新整理),踩了很多坑,都解決不了問題,分析閃爍的根源是因為重新整理的是整個tableview,想想如果只重新整理最後一行就好了,但是區域性重新整理的方法的前提是這行cell原來是存在的,但是這個直播訊息是每次有新訊息後有重新整理列表,乙個新的訊息產生後伴隨著乙個新的一行cell(其實是沒產生新的cell,有復用機制,這裡打個比方,不要誤解)。今天不知道怎麼開光了,突然想到tableview還有乙個insert的方法,一直不怎麼用竟然把她忘了。
解決後的**如下:
[chatdataarray addobject:chatmodel];
nsindexpath *myindexpath = [nsindexpath indexpathforrow: chatdataarray.count - 1 insection:0];
[chattable insertrowatindexpath:myindexpath withrowanimation:uitableviewrowanimationnone];
[chattable selectrowatindexpath:myindexpath animated:yes scrollposition:uitableviewscrollpositionbottom];
新的接受的訊息cell直接插入到最後一行,然後再自動滾動到底部。不閃了,哈哈,so easy!完美解決!請記住整個偉大的方法
- (void)insertrowsatindexpaths:(nsarray*)indexpaths withrowanimation:(uitableviewrowanimation)animation;
希望這篇文章可以幫到你o(∩_∩)o
iOS tableView的重新整理 筆記
1.tableview的重新整理 1 資料重新整理的總體步驟 修改模型資料 重新整理 重新整理介面 2 重新整理 重新整理介面 的方法 全域性重新整理 每一行都會重新重新整理 void reloaddata 區域性重新整理 使用前提 重新整理前後,模型資料的個數不變 void reloadrows ...
iOS TableView實現下拉重新整理資料
1.建立重新整理控制項,可通過xib或 方式建立控制項 void setupdownrefresh 2.將新資料載入到原資料的前面 插入資料前面 self.data insertobject knewdata atindex 0 3.重新整理 並結束重新整理狀態 重新整理tableview self...
iOS TableView實現下拉重新整理資料
1.建立重新整理控制項,可通過xib或 方式建立控制項 void setupdownrefresh 2.將新資料載入到原資料的前面 插入資料前面 self.data insertobject knewdata atindex 0 3.重新整理 並結束重新整理狀態 重新整理tableview self...