UI給的設(shè)計(jì)稿是這樣的:

設(shè)計(jì)稿要求
需求分析:
- 在訂單操作項(xiàng),如果是收起的狀態(tài),就是一個(gè)普通的列表,遂考慮采用UITableView。
- 點(diǎn)擊訂單操作按鈕,cell的高度會(huì)改變,所以會(huì)有一個(gè)刷新的過程,在heightForRowAtIndexPath方法里作出判斷如果indexPath.row等于選中的cell的序號(hào)就給他重新的賦值高度。
對(duì)后臺(tái)接口的分析:
- 后臺(tái)接口分為兩個(gè)部分,訂單列表接口和訂單詳情接口,進(jìn)入界面后先去調(diào)用訂單列表接口獲得需要展示的訂單數(shù)據(jù)。
- 點(diǎn)擊訂單的詳情,根據(jù)訂單ID獲取詳情數(shù)據(jù),在變長(zhǎng)的cell上展示出來。
綜上,得到了下面的解決方案:
- 定義一個(gè)selectedN變量來存取需要改變狀態(tài)的序號(hào)。
- 自定義的cell里面,分成兩部分,上面是一直展示的部分,下面是會(huì)根據(jù)狀態(tài)展示或隱藏的部分,點(diǎn)擊狀態(tài)改變按鈕,下面的部分選擇隱藏或展示,heightForRowAtIndexPath方法里根據(jù)selectedN來改變cell的高度。
- 在用第一個(gè)接口獲得數(shù)據(jù)后更新列表,然后循環(huán)遍歷模型數(shù)組獲取訂單ID,緊接著馬上調(diào)用第二個(gè)接口獲取訂單詳情,將詳情模型存到全局可變數(shù)組里,這時(shí)候不要更新,不過要記得在cellForRowAtIndexPath里面將兩個(gè)模型傳入,注意在傳入第二個(gè)模型的時(shí)候記得判斷數(shù)組是否為空。
- 根據(jù)上文思路,當(dāng)點(diǎn)擊狀態(tài)改變按鈕的時(shí)候會(huì)有更新,這時(shí)候又有數(shù)據(jù),又進(jìn)行了傳值,所以就大功告成了,而且不會(huì)造成卡頓,因?yàn)槲覀兪窃谟脩粑催M(jìn)行操作的時(shí)候進(jìn)行的數(shù)據(jù)獲取和解析。
希望我的思路可以幫助你解決tableView復(fù)雜界面的處理。