一坦报、表視圖的介紹
1、表視圖狂鞋,是iOS中最重要的試圖片择,很多應(yīng)用程序都會(huì)使用到,
2骚揍、表試圖里面可以放很多行信息
3字管、表視圖的兩種風(fēng)格
1)普通風(fēng)格
UITableViewStylePlain
2)分組風(fēng)格
UITableViewStyleGrouped
3)UITableViewStylePlain和UITableViewStyleGrouped。這兩者操作起來(lái)其實(shí)并沒(méi)有本質(zhì)區(qū)別信不,只是后者按分組樣式顯示前者按照普通樣式顯示而已嘲叔。
二、表視圖的基本結(jié)構(gòu)
1抽活、表視圖有表頭硫戈、表尾、中間一連串單元格試圖組成
1)設(shè)置表頭
tableHeaderView
2)設(shè)置單元格試圖
UITableViewCell下硕,單元格也可以分段顯示丁逝,每一段都可以通過(guò)代理設(shè)置段頭和段尾
2)設(shè)置表尾
tableFooterView
3) tableView的常用屬性和方法
設(shè)置表視圖分割線風(fēng)格
@property(nonatomic) UITableViewCellSeparatorStyle separatorStyle;
設(shè)置表視圖分割線顏色汁胆,默認(rèn)標(biāo)準(zhǔn)灰色
@property(nonatomic,retain) UIColor *separatorColor;
設(shè)置表視圖的頭部視圖
@property(nonatomic,retain) UIView *tableHeaderView;
設(shè)置表視圖的尾部視圖
@property(nonatomic,retain) UIView *tableFooterView;
設(shè)置表視圖單元格的行高
@property(nonatomic) CGFloat rowHeight;
設(shè)置表視圖背景
@property(nonatomic, readwrite, retain) UIView *backgroundView
刷新表視圖單元格中數(shù)據(jù)
- (void)reloadData;
顯示指示條
showsVerticalScrollIndicator
設(shè)置表視圖section頭部行高
@property(nonatomic) CGFloat sectionHeaderHeight;
設(shè)置表視圖section尾部部行高
@property(nonatomic) CGFloat sectionFooterHeight
三、單元格的顯示
1霜幼、單元格的位置表示
NSIndexPath:能表示當(dāng)前cell是tableView的第幾段第幾行
2沦泌、單元格的創(chuàng)建
UITableViewCell * cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
cell的樣式
1)UITableViewCellStyleDefault
左側(cè)顯示textLabel,imageView顯示在最左邊
2)UITableViewCellStyleValue1
左側(cè)顯示textLabel辛掠、右側(cè)顯示detailTextLabel谢谦,imageView顯示在最左邊
3)UITableViewCellStyleValue2
左側(cè)依次顯示textLabel(默認(rèn)藍(lán)色)和detailTextLabel,imageView可選
4)UITableViewCellStyleSubtitle
左上方顯示textLabel萝衩,左下方顯示detailTextLabel,imageView顯示在最左邊
cell的輔助圖標(biāo) accessoryType
1) 不顯示任何圖標(biāo)
UITableViewCellAccessoryNone,
2) 跳轉(zhuǎn)指示圖標(biāo)
UITableViewCellAccessoryDisclosureIndicator
3) 內(nèi)容詳情圖標(biāo)和跳轉(zhuǎn)指示圖標(biāo)
UITableViewCellAccessoryDetailDisclosureButton
4) 勾選圖標(biāo)
UITableViewCellAccessoryCheckmark
5) 內(nèi)容詳情圖標(biāo)
UITableViewCellAccessoryDetailButton
5) 自定義輔助圖標(biāo)
accessoryView屬性
3回挽、cell的常用屬性
1)設(shè)置cell的背景試圖
backgroundView
2)設(shè)置選中的cellbei的背景圖片
selectedBackgroundView
3) 設(shè)置選中時(shí)的樣式
selectionStyle
練習(xí):不分組的名人錄
四、數(shù)據(jù)源方法(UITableViewDatasource)
1猩谊、實(shí)例化表視圖時(shí)千劈,必須要實(shí)現(xiàn)他的數(shù)據(jù)源方法,以此來(lái)完成表中數(shù)據(jù)的配置牌捷,一般來(lái)說(shuō)數(shù)據(jù)源方法是用來(lái)配置表中的數(shù)據(jù)
2墙牌、常用數(shù)據(jù)源方法
1)配置section中含有行數(shù)
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
2)創(chuàng)建單元格實(shí)例
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
3) 配置表視圖section個(gè)數(shù),默認(rèn)為1
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
4)section中的頭部視圖的標(biāo)題
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;
5)section中的尾部視圖的標(biāo)題
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section;
/* 表視圖的編輯 移動(dòng)暗甥、刪除等 */
6)指定單元格是否支持編輯
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath*)indexPath;
7)指定單元格是否支持移動(dòng)
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath*)indexPath;
8)用戶編輯了哪一個(gè)單元格喜滨,在這里執(zhí)行刪除操作
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath*)indexPath;
9)實(shí)現(xiàn)此方法,移動(dòng)單元格
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath;
五撤防、代理方法(UITableViewDelegate)
1虽风、一般是處理表視圖基本樣式(單元格高度)以及捕捉選中單元格事件
2、常用代理方法
1)配置行高
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
2)設(shè)置section 頭部寄月、尾部視圖的高度
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;
3)自定義section頭部辜膝、尾部視圖,注意:需要指定高度
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;
4)用戶單擊單元格中輔助按鈕時(shí)漾肮,調(diào)用該方法
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath;
5)用戶單擊單元格厂抖,調(diào)用該方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
6)取消選中單元格時(shí),調(diào)用該方法
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(3_0);
7)設(shè)置單元格編輯樣式
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath;
練習(xí):分組的名字錄
1克懊、設(shè)置段頭忱辅、段尾
2、自定義段頭段尾
表視圖常用屬性和方法
屬性
1保檐、設(shè)置表視圖分割線風(fēng)格
@property(nonatomic) UITableViewCellSeparatorStyle separatorStyle;
2耕蝉、設(shè)置表視圖分割線顏色崔梗,默認(rèn)標(biāo)準(zhǔn)灰色
@property(nonatomic,retain) UIColor *separatorColor;
3夜只、設(shè)置表視圖的頭部視圖
@property(nonatomic,retain) UIView *tableHeaderView;
4、設(shè)置表視圖的尾部視圖
@property(nonatomic,retain) UIView *tableFooterView;
5蒜魄、設(shè)置表視圖單元格的行高
@property(nonatomic) CGFloat rowHeight;
6扔亥、設(shè)置表視圖背景
@property(nonatomic, readwrite, retain) UIView *backgroundView
7场躯、刷新表視圖單元格中數(shù)據(jù)
- (void)reloadData;
8、設(shè)置表視圖section頭部行高
@property(nonatomic) CGFloat sectionHeaderHeight;
9旅挤、設(shè)置表視圖section尾部部行高
@property(nonatomic) CGFloat sectionFooterHeight;
10踢关、 刷新表視圖section中數(shù)據(jù)
- (void)reloadSectionIndexTitles
11、默認(rèn)為NO粘茄,不可以編輯签舞,設(shè)置時(shí),不存在動(dòng)畫效果
@property(nonatomic,getter=isEditing) BOOL editing;
12柒瓣、覆蓋此方法儒搭,存在動(dòng)畫效果
- (void)setEditing:(BOOL)editing animated:(BOOL)animated;
13、默認(rèn)為YES芙贫,當(dāng)表視圖不在編輯時(shí)搂鲫,單元格是否可以選中
@property(nonatomic) BOOL allowsSelection NS_AVAILABLE_IOS(3_0);
14、默認(rèn)為NO磺平,當(dāng)表視圖在編輯時(shí)魂仍,單元格是否可以選中
@property(nonatomic) BOOL allowsSelectionDuringEditing;
15、默認(rèn)為NO拣挪,是否可以同時(shí)選中多個(gè)單元格擦酌,注意版本問(wèn)題
@property(nonatomic) BOOL allowsMultipleSelection
17、 默認(rèn)為NO菠劝,在編輯狀態(tài)下時(shí)仑氛,是否可以同時(shí)選中多個(gè)單元格,注意版本問(wèn)題
@property(nonatomic) BOOL allowsMultipleSelectionDuringEditing
方法
1闸英、指定一個(gè)cell锯岖,返回一個(gè)NSIndexPath實(shí)例,如果cell沒(méi)有顯示甫何,返回nil
- (NSIndexPath *)indexPathForCell:(UITableViewCell *)cell;
2出吹、指定一個(gè)范圍,返回一個(gè)數(shù)組辙喂,內(nèi)容是NSIndexPath實(shí)例捶牢,指定rect無(wú)效,返回nil
- (NSArray *)indexPathsForRowsInRect:(CGRect)rect;
3巍耗、指定一個(gè)NSIndexPath秋麸,返回一個(gè)cell實(shí)例,如果cell沒(méi)有顯示炬太,返回為nil
- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath;
4灸蟆、根據(jù)顯示的cell,返回一組cell實(shí)例的數(shù)組亲族,如果沒(méi)有顯示炒考,返回nil
- (NSArray *)visibleCells;
5可缚、根據(jù)顯示的cell,返回一組NSIndexPath實(shí)例的數(shù)組斋枢,如果沒(méi)有顯示帘靡,返回nil
- (NSArray *)indexPathsForVisibleRows;
6、滑動(dòng)到指定的位置瓤帚,可以配置動(dòng)畫
- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated;
7描姚、插入一行cell,指定一個(gè)實(shí)現(xiàn)動(dòng)畫效果
- (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
8戈次、刪除一行cell轰胁, 指定一個(gè)實(shí)現(xiàn)動(dòng)畫效果
- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
9、刷新一個(gè)行cell朝扼,指定一個(gè)實(shí)現(xiàn)動(dòng)畫效果
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);
10赃阀、移動(dòng)cell的位置,指定一個(gè)實(shí)現(xiàn)動(dòng)畫效果
- (void)moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath*)newIndexPath NS_AVAILABLE_IOS(5_0);
單元格的重用機(jī)制
試想如果這個(gè)表試圖有幾十個(gè)幾百行數(shù)據(jù)的話擎颖,如果我們每次都創(chuàng)建一個(gè)cell將會(huì)創(chuàng)建太多的對(duì)象榛斯,這樣會(huì)使你的軟件容易卡頓,如果這個(gè)cell上面在放有高清圖片的話更不可想象搂捧。
1)當(dāng)表試圖顯示時(shí)驮俗,首先會(huì)創(chuàng)建幾個(gè)cell顯示在界面上
2)當(dāng)一個(gè)cell被移出表視圖時(shí),這個(gè)cell對(duì)象并不會(huì)被釋放允跑,而是被放到一個(gè)緩存池中
3)當(dāng)一個(gè)cell將要顯示時(shí)王凑,我們先要在緩存池中查看緩存池中是否有cell,如果有的話,將這個(gè)cell對(duì)象取出來(lái)復(fù)用聋丝,如果沒(méi)有再重新創(chuàng)建