一、基本介紹
在iOS中,要實(shí)現(xiàn)表格數(shù)據(jù)展示,最常用的做法就是使用UITableView
UITableView繼承自UIScrollView,因此支持垂直滾動(dòng),?且性能極佳 庆猫。
UITableView有兩種風(fēng)格:
UITableViewStylePlain
UITableViewStyleGrouped。
這兩者操作起來其實(shí)并沒有本質(zhì)區(qū)別绅络,
只是后者按分組樣式顯示月培,前者按照普通樣式顯示而已。先看一下兩者的應(yīng)用:
二恩急、UItableview展示數(shù)據(jù)的過程
? UITableView需要一個(gè)數(shù)據(jù)源(dataSource)來顯示數(shù)據(jù)
? UITableView會(huì)向數(shù)據(jù)源查詢一共有多少行數(shù)據(jù)以及每?行顯示什么數(shù)據(jù)等
? 沒有設(shè)置數(shù)據(jù)源的UITableView只是個(gè)空殼
? 凡是遵守UITableViewDataSource協(xié)議的OC對(duì)象,都可以是UITableView的數(shù)據(jù)源
? 展示數(shù)據(jù)的過程:
(1)調(diào)用數(shù)據(jù)源的下面?法得知一共有多少組數(shù)據(jù)
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
(2)調(diào)用數(shù)據(jù)源的下面?法得知每一組有多少行數(shù)據(jù)
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
(3)調(diào)?數(shù)據(jù)源的下??法得知每??顯示什么內(nèi)容
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
注意:UItableview在默認(rèn)情況下是 UITableViewStylePlain杉畜,可以在右側(cè)設(shè)置style
三、自帶的UITableViewCell
3.1衷恭、UITableViewCell的結(jié)構(gòu)
3.2此叠、cell的重復(fù)使用原理
iOS設(shè)備的內(nèi)存有限,如果用UITableView顯示成千上萬條數(shù)據(jù)随珠,
就需要成千上萬個(gè)UITableViewCell對(duì)象的話灭袁,那將會(huì)耗盡iOS設(shè)備的內(nèi)存。
要解決該問題窗看,需要重用UITableViewCell對(duì)象
? 重用原理:當(dāng)滾動(dòng)列表時(shí)茸歧,部分UITableViewCell會(huì)移出窗口,
UITableView會(huì)將窗口外的UITableViewCell放入一個(gè)對(duì)象池中显沈,等待重用软瞎。
當(dāng)UITableView要求dataSource返回UITableViewCell時(shí),dataSource會(huì)先查看這個(gè)對(duì)象池,
如果池中有未使用的UITableViewCell铜涉,dataSource會(huì)用新的數(shù)據(jù)配置這個(gè)UITableViewCell智玻,
然后返回給UITableView,重新顯示到窗口中芙代,從而避免創(chuàng)建新對(duì)象
還有一個(gè)非常重要的問題:有時(shí)候需要自定義UITableViewCell(用一個(gè)子類繼承UITableViewCell)
而且每一行用的不一定是同一種UITableViewCell吊奢,
所以一個(gè)UITableView可能擁有不同類型的UITableViewCell,
對(duì)象池中也會(huì)有很多不同類型的UITableViewCell纹烹,
那么UITableView在重用UITableViewCell時(shí)可能會(huì)得到錯(cuò)誤類型的UITableViewCell
解決方案:UITableViewCell有個(gè)NSString *reuseIdentifier屬性页滚,
可以在初始化UITableViewCell的時(shí)候傳入一個(gè)特定的字符串標(biāo)識(shí)
來設(shè)置reuseIdentifier(一般用UITableViewCell的類名)。
當(dāng)UITableView要求dataSource返回UITableViewCell時(shí)铺呵,
先通過一個(gè)字符串標(biāo)識(shí)到對(duì)象池中查找對(duì)應(yīng)類型的UITableViewCell對(duì)象裹驰,
如果有,就重用片挂,如果沒有幻林,就傳入這個(gè)字符串標(biāo)識(shí)來初始化一個(gè)UITableViewCell對(duì)象
四、cell的重用代碼
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(
NSIndexPath *)indexPath
{
// 1.定義一個(gè)cell的標(biāo)識(shí)
static NSString *ID = @"Gqcell";
// 2.從緩存池中取出cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
// 3.如果緩存池中沒有cell
if(cell == nil) {
//創(chuàng)建Cell
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
}
// 4.設(shè)置cell的屬性...
return
cell;
}}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者