IOS 9 UITableView整理

首先,UITableView有兩種風格:UITableViewStylePlain和UITableViewStyleGrouped。微信

而後,UITableViewCellStyle的樣式代理

typedef NS_ENUM(NSInteger, UITableViewCellStyle) {
    UITableViewCellStyleDefault,   // 左側顯示textLabel(不顯示detailTextLabel),imageView可選(顯示在最左邊)    
    UITableViewCellStyleValue1,    // 左側顯示textLabel、右側顯示detailTextLabel(默認藍色),imageView可選(顯示在最左邊)    
    UITableViewCellStyleValue2,    // 左側依次顯示textLabel(默認藍色)和detailTextLabel,imageView可選(顯示在最左邊)    
    UITableViewCellStyleSubtitle   // 左上方顯示textLabel,左下方顯示detailTextLabel(默認灰色),imageView可選(顯示在最左邊)};

固然也能夠自定義TableViewCell。code

要使用UITableView必需要實現兩個協議UITableViewDataSource和UITableViewDelegate,並實現必要的代理方法。索引

必需要實現的有兩個事件

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

這兩個方法分別返回每組中的行數,所展現的tableviewcellit

可選的有io

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; //tableview總共多少組,默認爲1
- (nullable NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section; 
- (nullable NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section;

上面兩個方法返回每組頭部和尾部的文本,前提是實現了另外三個方法,才能展示,下面三個方法是用來分別設置每一行,每組頭部,每組尾部的高度table

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;

若是隻是設置title過於簡單,還能夠自定義view加入頭部和尾部,以下面兩個方法class

- (nullable UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;  
- (nullable UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;

UITableView的每一行點中以後有相應的響應事件,經過實現下面的方法實現select

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

UITableView默認還能夠想微信同樣編輯每一行,經過兩個方法實現

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath;
- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath;

第一個用來設置是否可編輯,默認是YES,第二個用來設置能夠怎麼編輯cell,以下示例代碼

- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewRowAction *topRowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"置頂" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
        NSLog(@"1111");
    }];
    topRowAction.backgroundColor = [UIColor blueColor];

    UITableViewRowAction *deleteRowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"刪除" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
        NSLog(@"2222");
    }];
    deleteRowAction.backgroundColor =[UIColor redColor];
    return @[topRowAction, deleteRowAction];
}



選中每一個cell時默認會有選中狀態,以下結構體:

typedef enum { 
    UITableViewCellSelectionStyleNone, 
    UITableViewCellSelectionStyleBlue, 
    UITableViewCellSelectionStyleGray 
} UITableViewCellSelectionStyle

若是不須要選中狀態,能夠設置爲

UITableViewCellSelectionStyleNone

固然也能夠在下面方法中設置

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}



UITableView支持設置索引,只要在如下方法中返回每組的index就行

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView



要讓UITableView展現數據,就必要在數據源到位後調用reloadData方法,會刷新整個tableview,固然也能夠單獨刷新某一組或者某一行,代碼以下

//section
NSIndexSet *indexSet=[[NSIndexSet alloc]initWithIndex:index];
[tableview reloadSections:indexSetwithRowAnimation:UITableViewRowAnimationAutomatic];
//cell 
NSIndexPath *indexPath=[NSIndexPath indexPathForRow:row inSection:section];   
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
相關文章
相關標籤/搜索