UITableView內置了兩種樣式:UITableViewStylePlain,UITableViewStyleGrouped數組
<UITableViewDataSource,UITableViewDelegate>協議 緩存
##UITAbleeViewDataSource協議ide
//調用數據源的下面方法得知一共有多少組數據spa
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; 3d
//調用數據源的下面方法得知每一組有多少行數據代理
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section; code
//調用數據源的下面方法得知每一行顯示什麼內容blog
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; 索引
###Cell的重用代碼 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // 1.定義一個cell的標識 static NSString *ID = @」cell"; // 2.從緩存池中取出cell UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; // 3.若是緩存池中沒有cell if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID]; } // 4.設置cell的屬性... //cell.textLabel.text = str; //cell.detailTextLabel.text = @""; //cell.accessoryType = UITableViewCellAccessoryCheckmark; //cell.accessoryView //設置右邊視圖 //cell.backgroundView = view;系統默認,frame沒法修改 return cell; } ================================== //註冊cell 可替代上面代碼 [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell」]; - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; //設置cell屬性 .... return cell; }
// 4.設置cell的屬性...
//cell.textLabel.text = str;
//cell.detailTextLabel.text = @"";
//cell.accessoryType = UITableViewCellAccessoryCheckmark;
//cell.accessoryView //設置右邊視圖
//cell.backgroundView = view;系統默認,frame沒法修改rem
//設置cell的高度,cell默認高度44
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
#pragma mark - 設置組頭
//設置段的標題
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
//設置組頭高度
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
//設置組頭的view
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
#pragma mark - 索引
//返回索引數組
-(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
開啓表格的編輯狀態
_tableView.editing = YES; 或
- (void)setEditing:(BOOL)editing animated:(BOOL)animated; 開啓表格編輯狀態
//返回表格編輯編輯樣式。不實現默認都是刪除
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
return editingStyle : UITableViewCellEditingStyleDelete, UITableViewCellEditingStyleInsert
多選狀態時,return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert 與選擇和反選結合使用
//根據editingStyle處理是刪除仍是添加操做完成刪除、插入操做刷新表格
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
#pragma mark - 刪除和插入 - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { return UITableViewCellEditingStyleInsert; } //代理方法, cell向左滑動出現delete // 點擊delete執行代碼 //參數1: 編輯風格 Delete,Insert //參數2: 提供刪除的行的位置 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { NSLog(@"row = %ld",indexPath.row); if(editingStyle == UITableViewCellEditingStyleDelete ) { NSMutableArray *subArray = _dataArray[indexPath.section]; [subArray removeObjectAtIndex:indexPath.row]; } if(editingStyle == UITableViewCellEditingStyleInsert) { NSString *insertString = @"新數據"; NSMutableArray *subArray = _dataArray[indexPath.section]; [subArray insertObject:insertString atIndex:indexPath.row+1]; } [tableView reloadData]; } //設置刪除按鈕 - (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath { return @"刪除"; }
#pragma mark - 移動
//注意: 一旦添加這個方法,編輯狀態下每一個cell出現移動標誌
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
#pragma mark - 移動 //代理方法, 支持移動 //參數1: 源位置 //參數2: 目標位置 //注意: 一旦添加這個方法,編輯狀態下每一個cell出現移動標誌 - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath { //先從源數組拿出數據 NSMutableArray *sourceArray = _dataArray[sourceIndexPath.section]; NSString *string = sourceArray[sourceIndexPath.row]; [sourceArray removeObjectAtIndex:sourceIndexPath.row]; //插入目標數組 NSMutableArray *destArray = _dataArray[destinationIndexPath.section]; [destArray insertObject:string atIndex:destinationIndexPath.row]; }
#pragma mark - 選擇和反選
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
#pragma mark - 選擇和反選 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSLog(@"sec=%ld row=%ld",indexPath.section,indexPath.row); } -(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { NSLog(@"des sec=%ld row=%ld",indexPath.section,indexPath.row); }
UISearchBar中有tableview,使用時應注意判斷
//讓表格顯示最後一行
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:_dataArray.count-1 inSection:0];
[_tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];