上篇文章寫道怎么在tableviewcontroller里面添加一個(gè)view 用的是
[[[[UIApplication sharedApplication]? windows] firstObject] addSubview:_payView];
這樣將一個(gè)view添加到UIApplication的firstObject乘寒,對于后續(xù)維護(hù)不方便,而且這樣添加的view到其他界面還要隱藏起來归形,是一種“不健康的方式”。
對于訂單確認(rèn)這種界面潮太,內(nèi)容可能會(huì)有增刪糯而,不應(yīng)該去使用tableviewcontroller,其根view是一個(gè)UITableview娃肿,導(dǎo)致很多很多問題罐栈,比如直接用addsubview添加一個(gè)view會(huì)隨著tableview的滾動(dòng)而滾動(dòng)黍衙,最好的方法就是讓根view是一個(gè)UIView。
下面簡單的介紹一下荠诬,怎么在viewcontroller拉取一個(gè)Dynamic Prototypes的tableview琅翻,代碼實(shí)現(xiàn)多個(gè)section褂始,如圖1
首先杂伟,在一個(gè)viewcontroller里面拉取一個(gè)tableview,并添加多個(gè)cell拯钻,cell的樣式相當(dāng)于要存在section的一樣钧嘶,每一個(gè)cell起一個(gè)單獨(dú)的reuse identifier棠众,再每個(gè)cell單獨(dú)建一個(gè)UITableviewCell文件,相同的cell就不用寫兩個(gè)有决,如圖一中的微信支付和支付寶支付只需要一個(gè)cell闸拿,到時(shí)候?qū)υ揷ell進(jìn)行重用。如圖2
界面弄了之后书幕,下面就是代碼碼阿碼阿阿碼阿碼阿碼
先是確定有幾個(gè)section新荤,在確定section里面的row有多少個(gè)
- (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;?
} }
確定了數(shù)量之后,往每個(gè)section里面填入相應(yīng)的cell台汇,即引入上面創(chuàng)建的UITableviewCell文件苛骨,創(chuàng)建新的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里面拉相應(yīng)的label智袭,進(jìn)行值的變化
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;
}
最后對每個(gè)section取個(gè)title奔缠,再調(diào)整它的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里面每個(gè)row的高度
- (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath{
switch(indexPath.section) {
case0: return60;? break;
...
}}
其實(shí)整個(gè)就是創(chuàng)建cell掠抬,讓section帶入每個(gè)cell,用reuse identifier來區(qū)別校哎。
對于tableviewcontroller還是少用為好两波,畢竟用viewcontroller里面放個(gè)tableview也幾乎能完成全部功能瞳步,就是編寫時(shí)比較麻煩,但是易于維護(hù)腰奋。
萌新一起學(xué)習(xí)单起。