關(guān)于cell 的三種方式緩存池
1.code:最原始的方式(必須搞懂這個(gè)才能搞懂下面的兩種形式)
1.創(chuàng)建標(biāo)識(shí)
2.去緩存池查找
3.找不到哦,新建一個(gè)(新建一個(gè))
2.1storyboard(拖拽一個(gè)tableViewController控制器)
去除了新建一個(gè)的代碼,直接將創(chuàng)建的標(biāo)識(shí)寫入main.storyboard中的cell的identifier上
2.2.storyboard 中viewController中拖拽一個(gè)tableView 控件)
默認(rèn)是沒有cell給創(chuàng)建出來的(跟2 的區(qū)別要弄清楚)
在TableView 中右側(cè)的導(dǎo)航欄中選擇prototype cells 為3
這樣的話就能創(chuàng)建三個(gè)cell出來
到這里就和2 一模一樣了
3.創(chuàng)建xib 中拖拽每一個(gè)cell所需要的控件 然后在相應(yīng)類里面對(duì)控件的數(shù)據(jù)利用拿到的模型model賦值
(創(chuàng)建xib的時(shí)候有兩種形式,
1.創(chuàng)建cell類的時(shí)候勾選底部xib
2.先創(chuàng)建cell類然后創(chuàng)建xib 然后對(duì)xib進(jìn)行類的關(guān)聯(lián) (其實(shí)就是省去了代碼創(chuàng)建控件然后做代碼做布局的步驟而已) )
如果要建立多個(gè)不同標(biāo)識(shí)的cell ,通過第三種方式的話就需要?jiǎng)?chuàng)建不同多個(gè)相應(yīng)的cell類(一個(gè)xib對(duì)應(yīng)一個(gè)cell類)
一定要將第一種代碼創(chuàng)建的形式搞明白,不然后面的這兩種延伸模式是不會(huì)搞懂的
下面是我在學(xué)習(xí)本章知識(shí)點(diǎn)的時(shí)候?qū)懙牧闵⒐P記
**下面這些是我在學(xué)習(xí)的時(shí)候做的零散的筆記---------**
要使用一個(gè)tableview的完整步驟:
創(chuàng)建tableview
設(shè)置數(shù)據(jù)源代理
遵守協(xié)議
實(shí)現(xiàn)數(shù)據(jù)源跟代理方法
就能監(jiān)聽tableView的行為 也能告訴tableView顯示東西
總結(jié):數(shù)據(jù) 監(jiān)聽點(diǎn)擊
運(yùn)行程序崩潰:
新建一個(gè)tableViewController 在main.Storyboard 里面 ,如果不新建,直接改class所屬類
運(yùn)行過后沒有結(jié)果 : 因?yàn)樵瓉砟J(rèn)的是uiviewController 而不是UItableViewController
運(yùn)行黑屏:
如果不修改自定義的UITableViewController類會(huì)出現(xiàn)黑屏的現(xiàn)象.
拖拽的uitableViewController里面有一個(gè)cell 這個(gè)cell 可以替代之前第一種如果緩存池中沒有cell
則代碼新建一個(gè)cell
現(xiàn)在代碼創(chuàng)建cell 的步驟就不用了,(你就理解成為系統(tǒng)已經(jīng)默認(rèn)給我們創(chuàng)建好了一個(gè)cell讓我們用來重用)
只需要將main.stortboard 里面的cell identifer 改為你要去緩存池中查找的時(shí)候的那個(gè)標(biāo)識(shí)符就行了
記住: 這兩種方法大同小異,一個(gè)是手動(dòng)創(chuàng)建一個(gè)是系統(tǒng)給定了.不要矛盾,分開去看
cell內(nèi)部有一個(gè)contentView (相當(dāng)于cell里面所有控件的容器) :
蘋果官方建議 以后cell 里面要放控件的話,就對(duì)contentView里面去放就可以了
如果這句話你不理解也沒有關(guān)系,你可以向cell內(nèi)部拖拽控件,你發(fā)現(xiàn),控件默認(rèn)放在contentView內(nèi)部作為子控件了
tableView 性能優(yōu)化
總結(jié)2 storyBoard 方式cell;
先去緩存池中找 ,這一步都是一樣的
區(qū)別的就是,在你告訴他怎么去找這一步上面?
我們現(xiàn)在討論的是:在storyboard contentView里面 創(chuàng)建不同的cell,通過identifer 來區(qū)分不同cell,這樣在加載cell的時(shí)候
就能夠加載不同類型的cell 了
總結(jié)3 在storyboard 中viewController中添加 tableView 然后點(diǎn)擊右側(cè)導(dǎo)航欄,設(shè)置為非零個(gè)數(shù) 就能在tableView 中顯示cell 了
demo:團(tuán)購(gòu)
通過storyboard方式創(chuàng)建cell
思路:
1.只需要在storyboard 中默認(rèn)給出的cell 中拖拽控件, 默認(rèn)系統(tǒng)給了三個(gè),如果用代碼的方式必須重新創(chuàng)建新的視圖或者控件
2.identifier 別忘了 一定要和代碼中定義的重用標(biāo)識(shí)符一致
3.模擬加載數(shù)據(jù) 使用plist
4.新建 model(模型) 字典轉(zhuǎn)模型----------mvc
4.1 懶加載(將字典轉(zhuǎn)為相應(yīng)的模型)
5.方法一:
給cell 內(nèi)部每一個(gè)控件綁定tag 10 20 30 40
用處:在我們給cell 賦值的時(shí)候:
UIImageView *iconView=(UIImageView*)[cell viewWithTag:10];
iconView.image=[UIImageiamgeNamed:deal.icon];
tag 為20 40 30 的就不列舉了
通過這個(gè)繁瑣的方式也能將plist 里面的數(shù)據(jù)添加到 cell 的控件上
更簡(jiǎn)便的方式是新建一個(gè)類: cell類
在類里面我們?cè)O(shè)置空間屬性,在上面的地方只需要拿到plist里面的數(shù)據(jù)傳進(jìn)來即可,就能達(dá)到將數(shù)據(jù)封裝了
5.1.1
方法二: 新建一個(gè)類 xxcell (XMGDealCell) :給控件的賦值操作就轉(zhuǎn)移到這個(gè)類內(nèi)部,外部只需要處理邏輯就可以 這樣以后再修改程序的時(shí)候能很方便的找到要修改的地方
新建一個(gè)團(tuán)購(gòu)模型數(shù)據(jù)(...表示上下都有相應(yīng)的代碼,這里只需要腦補(bǔ)一下就好,因?yàn)樘R?所以就不打出來了)
XMGDealCell.h
#import <UIKit/UIKit.h>
@class XMGDeal;
@interface TableViewCell : UITableViewCell
@property(nonatomic,strong)XMGDeal*deal;
@end
XMGDealCell.m
重寫 模型數(shù)據(jù)屬性的set方法,然后在set方法里面對(duì)空間設(shè)置值
-(void)setDeal{
_deal=deal;
**UIImageView*iconView=(UIImageView*)[cell viewWithTag:10];**
改為:UIImageView*iconView=(UIImageView*)[self viewWithTag:10];
iconView.image=[UIImage ImageWithNamed:deal.icon];
}
5.1.2
上面說的 外部只需要處理邏輯就可以:
實(shí)現(xiàn)起來就是講這個(gè)類在viewController.m文件里進(jìn)行申明.然后UITableVeiwCell*cell
就可以改成用自定義的UITableViewCell類了
設(shè)置main.storyboard里面將cell 的導(dǎo)航欄參數(shù) class 改為我們創(chuàng)建cell類型,就是XMGDealCell (之前默認(rèn)的是系統(tǒng)給定UITableViewCell)
總結(jié):就是說從我們創(chuàng)建的uitableViewCell 類創(chuàng)建cell ,因?yàn)檫@樣我們就能在類內(nèi)部拿到模型數(shù)據(jù)后給控件賦值