UI給的設計稿是這樣的:
![設計稿要求](https://i.iter01.com/images/ad98651820a7e8b3f0b26d9a2ed6cd2fb645e268e75e052b7d48ed491f7d7b67.png)
需求分析:
- 在訂單操作項,如果是收起的狀態,就是一個普通的列表,遂考慮採用UITableView。
- 點選訂單操作按鈕,cell的高度會改變,所以會有一個重新整理的過程,在heightForRowAtIndexPath方法裡作出判斷如果indexPath.row等於選中的cell的序號就給他重新的賦值高度。
對後臺介面的分析:
- 後臺介面分為兩個部分,訂單列表介面和訂單詳情介面,進入介面後先去呼叫訂單列表介面獲得需要展示的訂單資料。
- 點選訂單的詳情,根據訂單ID獲取詳情資料,在變長的cell上展示出來。
綜上,得到了下面的解決方案:
- 定義一個selectedN變數來存取需要改變狀態的序號。
- 自定義的cell裡面,分成兩部分,上面是一直展示的部分,下面是會根據狀態展示或隱藏的部分,點選狀態改變按鈕,下面的部分選擇隱藏或展示,heightForRowAtIndexPath方法里根據selectedN來改變cell的高度。
- 在用第一個介面獲得資料後更新列表,然後迴圈遍歷模型陣列獲取訂單ID,緊接著馬上呼叫第二個介面獲取訂單詳情,將詳情模型存到全域性可變陣列裡,這時候不要更新,不過要記得在cellForRowAtIndexPath裡面將兩個模型傳入,注意在傳入第二個模型的時候記得判斷陣列是否為空。
- 根據上文思路,當點選狀態改變按鈕的時候會有更新,這時候又有資料,又進行了傳值,所以就大功告成了,而且不會造成卡頓,因為我們是在使用者未進行操作的時候進行的資料獲取和解析。
希望我的思路可以幫助你解決tableView複雜介面的處理。