UITableView,iosuitableview
知識點:
1)UITableView
2)UITableViewCell
======================================================
一、UITableView
1、UITableView介紹
UITableView為列表視圖,繼承UIScrollView
2、常用的屬性
1)separatorColor 分割線顏色
2)separatorStyle 分割線樣式
3)separatorInset 分割線的位置
3)rowHeight cell的高度,預設為44
4)dataSource 資料來源代理
5)delegate 代理
3、複用機制
4、常用代理
//設定組的數目
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
//設定每組的cell數目
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
//設定cell的內容
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
//設定cell的高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
//當點擊cell時會自動調動
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
=====================================================
二、UITableViewCell
1、UITableViewCell介紹
UITableView上每一行就是一個UITableViewCell,用來顯示不同的內容
2、cell的樣式
️. UITableViewCellStyleDefault, // 只有一個label(即textLabel正標題)在右邊,和imageView在左邊
️. UITableViewCellStyleValue1, // 兩個label,左邊的label(即textLabel正標題)字型預設為黑色並 且向靠左對齊,右邊的label字型(即detailTextLabel副標題)預設為黑色並且向靠右對齊
️. UITableViewCellStyleValue2, //兩個label,左邊的label(即textLabel正標題)字型預設為藍色並 且向靠右對齊,右邊的label字型(即detailTextLabel副標題)預設為黑色並且向靠左對齊
️. UITableViewCellStyleSubtitle // Left aligned label on top and left aligned label on bottom with gray text (Used in iPod).上下兩個label,上邊的label(即textLabel正標題)字型預設為灰色並且向左對 齊,下邊的label字型(即detailTextLabel副標題)預設為灰色並且向靠左對齊
3、UITableViewCell屬性(使用cell中的系統控制項時,要注意cell的樣式,倘若沒有,就算寫了也不會顯示)
1)textLabel 標題
2)detailTextLabel 副標題
3)imageView
4)accessoryType 右邊的圖片樣式(預設是UITableViewCellAccessoryNone)設定了樣式才會顯示
/**
UITableViewCellAccessoryNone 沒有樣式(預設值)
UITableViewCellAccessoryDisclosureIndicator 箭頭
UITableViewCellAccessoryDetailDisclosureButton 驚嘆號和箭頭
UITableViewCellAccessoryCheckmark 打鉤
UITableViewCellAccessoryDetailButton 驚嘆號
*/
5)selectionStyle 點擊cell時高亮效果,具體樣式如下
/**
UITableViewCellSelectionStyleNone 無
UITableViewCellSelectionStyleDefault 預設,灰色
*/
6)cell的操作
刪除cell
- (void)deleteRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
添加cell
- (void)insertRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
移動cell
- (void)moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath
重新整理
- (void)reloadRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
4、組頭和表頭區別
️.組頭或者組尾的顯示需要代理的實現
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
// 設定組頭或者組尾的高度才會調用viewForHeaderInSection或者viewForFooterInSection代理
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
️.UITableViewHeaderFooterView屬性
1)textLabel 標題
2)detailTextLabel 副標題
️.表頭(tableHeaderView),表頭只有一個,高度由當前建立的view決定,寬度由tableView決定
5、tableView其他常用代理
1)返回組頭的標題
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
2)返回組尾的標題
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section;
3) 是否允許編輯,預設全部允許編輯
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
4)修改刪除按鈕上的文字
- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
5)編輯狀態,實現這個代理就可以刪除或插入(通過判斷editingStyle的類型,做出相應的操作)
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
6) // 8.0 的新代理方法
// 同時設定左劃cell時出現多個按鈕(刪除、置頂、更多)
// 如果實現了這個代理方法,內建的刪除就沒有了
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
//通過以下方法建立按鈕
+ (instancetype)rowActionWithStyle:(UITableViewRowActionStyle)style title:(nullable NSString *)title handler:(void (^)(UITableViewRowAction *action, NSIndexPath *indexPath))handler;
7)移動cell的代理,實現了這個代理才能移動
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
8)返回索引
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
【備忘】UITableViewIndexSearch 搜尋的表徵圖
9)控制索引
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
【備忘】返回-1,什麼都不做