方案一:
一個tableview,三個數據數組(一個最新,一個最熱,一個指針引用),然後用segment切換來控制tableview的加載數據,切換時用reloaddata重新加載需要顯示的數據。需要說明tableview加了下拉刷新的功能。
實現:功能已實現。
問題:
切換時重新加載內容,徒增性能損耗;
因為cell中有作者頭像,是從互聯網上加載的,因此每次重新加載tableview時都重新下載一遍頭像,這對流量無端的損耗是不可饒恕的,是注定要被用戶拋棄的。即使使用了異步加載,圖像緩存技術,但是這個隱患還是很大。
滾動位置在切換時丟失,這個丟失是對用戶體驗而言的。實際是兩個數據源大小不同,tableview的顯示位置固定,影響用戶體驗。
下拉刷新完成後也會重新加載內容,如果刷新中切換頁面,可能導致刷新內容丟失,或者刷新提示混亂。
試圖解決方案:在界面上創建兩個tableview實例,因為兩個列表內容格式和顯示樣式完全一致,因此復用默認的tableview,最恰當。因此我就希望用深度復制的辦法創建一個新的實例,這樣兩個tableview互不影響,又達到復用的目的,但是遺憾的是復制實例,報錯,貌似不支持。
方案二:
順著方案一的思路,在界面上方兩個tableview,為了復用性,我們在storyboard上的view上拖一個tableview,綁定自定義的blogtableview類。界面會自動創建一個tableview,我們在界面初始化函數中再創建一個blogtableview實例,因為這個類綁定了界面,因此實例後就能復用了界面上的格式和布局了(我是這麼認為的,剛好用這個方案驗證類和界面綁定的關系),我們把刷新函數和數據源,代理函數全放在自定義類中,徹底分離兩個列表實例。主界面類只負責tableview實例創建和界面切面的工作。這樣原來一個類實現的功能就要放到一個控制類一個業務類中了,其實我覺得這個分離是合理優化。
實現:等下了火車驗證。
方案三:
在界面上拖兩個tableview,格式和布局完全一樣,這種方案我是接受不了的。