代碼實現有多個section的tableview

上篇文章寫道怎么在tableviewcontroller里面添加一個view 用的是

[[[[UIApplication sharedApplication]? windows] firstObject] addSubview:_payView];

這樣將一個view添加到UIApplication的firstObject,對于后續維護不方便,而且這樣添加的view到其他界面還要隱藏起來,是一種“不健康的方式”。

對于訂單確認這種界面,內容可能會有增刪,不應該去使用tableviewcontroller,其根view是一個UITableview,導致很多很多問題,比如直接用addsubview添加一個view會隨著tableview的滾動而滾動,最好的方法就是讓根view是一個UIView。

下面簡單的介紹一下,怎么在viewcontroller拉取一個Dynamic Prototypes的tableview,代碼實現多個section,如圖1


圖1

首先,在一個viewcontroller里面拉取一個tableview,并添加多個cell,cell的樣式相當于要存在section的一樣,每一個cell起一個單獨的reuse identifier,再每個cell單獨建一個UITableviewCell文件,相同的cell就不用寫兩個,如圖一中的微信支付和支付寶支付只需要一個cell,到時候對該cell進行重用。如圖2


圖2

界面弄了之后,下面就是代碼碼阿碼阿阿碼阿碼阿碼

先是確定有幾個section,在確定section里面的row有多少個

- (NSInteger)numberOfSectionsInTableView:(UITableView*)tableView { ?return6; }

- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section {

switch(section) {

case0: return1;? break;

case1: return1; break;

case2: return2; break;

case3: return1; break;

case4: return1; break;

case5: return1; break;

default: return0; break;?

} }

確定了數量之后,往每個section里面填入相應的cell,即引入上面創建的UITableviewCell文件,創建新的cell用上面寫好的cell reuse identifier確定

-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {

switch(indexPath.section) {

case0:

{

AddrInOrderConfirmTableViewCell* addrCell = [tableView dequeueReusableCellWithIdentifier:@"CellForAddr"];

//AddrInOrderConfirmTableViewCell是UITableviewCell文件,填寫在cell的custom class

//CellForAddr是cell的reuse identifier

return addrCell;

break;

}

...

//對相同的cell的重用如下,再PayTypeInOrderConfirmTableViewCell里面拉相應的label,進行值的變化

case2:

{

PayTypeInOrderConfirmTableViewCell* payTypeCell = [tableViewdequeueReusableCellWithIdentifier:@"CellForPayType"];

if(indexPath.row==0) {

payTypeCell.payTypeImg.image= [UIImageimageNamed:@"zhifubao"];

payTypeCell.payTypeLabel.text=@"支付寶支付";

}elseif(indexPath.row==1){

payTypeCell.payTypeImg.image= [UIImageimageNamed:@"wechat"];

payTypeCell.payTypeLabel.text=@"微信支付";

}returnpayTypeCell;

break;

}

最后對每個section取個title,再調整它的header和footer的高度就好了

- (NSString*)tableView:(UITableView*)tableView titleForHeaderInSection:(NSInteger)section{

NSString* sectionName;

switch(section){

case0: sectionName =@"配送地址"; break;

...

}

return sectionName;

}

- (CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section {

switch(section) {

case0: return50;? break;

...

}}

-(CGFloat)tableView:(UITableView*)tableView heightForFooterInSection:(NSInteger)section {

return CGFLOAT_MIN;

}

//section里面每個row的高度

- (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath{

switch(indexPath.section) {

case0: return60;? break;

...

}}

其實整個就是創建cell,讓section帶入每個cell,用reuse identifier來區別。

對于tableviewcontroller還是少用為好,畢竟用viewcontroller里面放個tableview也幾乎能完成全部功能,就是編寫時比較麻煩,但是易于維護。

萌新一起學習。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容