UITableView

 

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;
}
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];
    
}
View Code

 

#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);
}
View Code

 

自定義表格行UITableViewCell

 

 

UISearchBar中有tableview,使用時應注意判斷

//讓表格顯示最後一行

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:_dataArray.count-1 inSection:0];

    [_tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];

相關文章
相關標籤/搜索