引:最近寫個(gè)項(xiàng)目,自己寫的模塊有這樣的需求:一個(gè)頁(yè)面排列著不同的產(chǎn)品卡(考慮用UITableView寫),這些產(chǎn)品卡的順序、是否顯示會(huì)根據(jù)后臺(tái)請(qǐng)求的數(shù)據(jù),或者當(dāng)前用戶登陸賬號(hào)的權(quán)限來(lái)顯示(動(dòng)態(tài)的),重構(gòu)了幾次代碼,最后得到下面的結(jié)果:
1、實(shí)現(xiàn)思路
- 所謂動(dòng)態(tài)是已確定所有卡片的情況下動(dòng)態(tài)
- 用一個(gè)視圖模型處理tableView的回調(diào),數(shù)據(jù)請(qǐng)求邏輯,整個(gè)控制器級(jí)的邏輯,產(chǎn)品卡模型界面添加等
- 用一個(gè)BaseModel抽象類處理tableView的section級(jí)的抽象接口和屬性聲明(實(shí)現(xiàn)在相應(yīng)子類實(shí)現(xiàn),一個(gè)產(chǎn)品卡對(duì)應(yīng)一個(gè)子類)
- 用一個(gè)BaseCell抽象類處理tableView的視圖與數(shù)據(jù)關(guān)聯(lián)
2、使用
*第一步: 根據(jù)BaseCell為基類定制相應(yīng)的產(chǎn)品卡,根據(jù)BaseModel為基類定制相應(yīng)產(chǎn)品卡模型,每個(gè)產(chǎn)品卡必須對(duì)應(yīng)一個(gè)模型
- 第二步:使用ViewModel的addSubstanceModelName:方法和addSubstanceCellName:方法將模型和產(chǎn)品卡視圖添加入視圖模型
- 第三步:使用ViewModel的方法showOrders:調(diào)整產(chǎn)品卡的順序,按照,自己想要的順序顯示
- 第四步:請(qǐng)求數(shù)據(jù)(如果請(qǐng)求數(shù)據(jù)為空,會(huì)將model的一個(gè)屬性設(shè)置為NO,不會(huì)對(duì)改產(chǎn)品卡進(jìn)行顯示)
3、不知道怎么解決的問(wèn)題
- 每個(gè)model和cell在ViewModel里面根據(jù)NSNumber進(jìn)行定位的,因此在調(diào)用showOrders:方法時(shí),需要類似這樣傳入:[self.viewModel showOrders:@[@(1),@(0),@(2)]];(下標(biāo)從0開始)
- 每個(gè)model和cell根據(jù)基類進(jìn)行個(gè)性定制,model和cell里面的內(nèi)容不確定,需要根據(jù)需求確定,有必要需要修改ViewModel里面的代碼(不知道怎么解決)