UITableViewDelegate


UITableViewDelegate  

  關於UITableView的另一個代理方法UITableViewDelegate.
對於這個方法的一些代理方法有:

設置每個row的高

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath


估計行高,如果行高不夠裝現在的內容了,就會增加到默認的行高,來適應內容

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath


設置當前的cell的內容向後移動多少距離再顯示

- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath


當某一行將要顯示的時候,就執行這個方法

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath


接收用戶對這些indexPath的內容進行了哪些操作的數組

- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath


用於自定義cell,在右邊的button被點擊的時候執行這個方法

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath


當某一個indexPath將要被點擊的時候執行的方法,可以按照indexPath的不同來執行不同的事件

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath


當某一個indexPath被點擊之後執行的事件響應

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


將要取消選擇某一個cell

- (NSIndexPath *)tableView:(UITableView *)tableView willDeselectRowAtIndexPath:(NSIndexPath *)indexPath


已經取消某一個cell的選擇

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath


設置section的頭視圖

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section


設置section的尾視圖

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section


設置section的頭高度

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section


預計設置section的頭高度

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForHeaderInSection:(NSInteger)section


設值section的尾高度

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section


預計設置section的尾高度

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForFooterInSection:(NSInteger)section


將要顯示頭視圖

- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section


將要顯示尾視圖

- (void)tableView:(UITableView *)tableView willDisplayFooterView:(UIView *)view forSection:(NSInteger)section


將要開始編輯indexPath

- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath


已經結束編輯indexPath

- (void)tableView:(UITableView *)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath


設置編輯的狀態是什麼樣的

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath

delete:刪除

insert:插入

delete | insert :多選


點擊編輯狀態下的"-"之後顯示出來的刪除按鈕的標題

- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath


當表視圖在編輯狀態下時,問代理是否應該縮進指定的行的背景。

- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath


要求代表返回一個新的索引路徑重定目標行的一個提出的移動,要與detacemove方法配合使用

- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath


結束顯示cell的時候調用,就是在屏幕上看不見的時候調用

- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath


在屏幕上看不見頭視圖的時候調用,已經結束顯示頭視圖

- (void)tableView:(UITableView *)tableView didEndDisplayingHeaderView:(UIView *)view forSection:(NSInteger)section


已經結束顯示尾視圖的時候調用

- (void)tableView:(UITableView *)tableView didEndDisplayingFooterView:(UIView *)view forSection:(NSInteger)section


是否應該在一個確定的row顯示編輯菜單

- (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath


針對某一特定的row是否編輯菜單應該刪除複製和粘貼

- (BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender

這個返回值並不是BOOL,應該返回一個action的方法,例如return (action == @selector(copy));


在給定的包含row的地方執行復制或粘貼

- (void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender


自定義編輯狀態下的按鈕的

- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath

返回數組的類型是UITableViewRowAction

UITableViewRowAction的初始化方法是rowActionWithStyle


在點擊某一個cell的時候是否高亮顯示

- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath


點擊某一個cell之後,高亮顯示時執行的代理

- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath


點擊某一個cell之後,高亮顯示之後執行的代理方法

- (void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath



下面是我測試這些方法的時候寫的一些代碼


//

//  RootViewController.m

//  UITableView-UITableViewDelegate

//

//  Created by me760 on 15/8/27.

//  Copyright (c) 2015 月女冬舞. All rights reserved.

//


#import "RootViewController.h"


@interface RootViewController ()<UITableViewDelegate, UITableViewDataSource>


@end


@implementation RootViewController


- (void)dealloc{

    [_tableView release];

    [super dealloc];

}


- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view.

    

    self.view.backgroundColor = [UIColor brownColor];

    

    self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped];

    _tableView.delegate = self;

    

    _tableView.dataSource = self;

    [self.view addSubview:_tableView];

    [_tableView release];

//    [_tableView setEditing:YES];

}


- (void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath{

    NSLog(@"已經不高亮了");

}


- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath{

    NSLog(@"已經高亮了");

}


//在點擊cell的時候是否顯示高亮

- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath{

    return YES;

}


//自定義右邊的編輯按鈕

- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath{

    UITableViewRowAction *action = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"刪除" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {

        NSLog(@"自定義按鈕執行了");

    }];

    UITableViewRowAction *action1 = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"添加" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {

        NSLog(@"自定義按鈕1執行了");

    }];

    UITableViewRowAction *action2 = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"修改" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {

        NSLog(@"自定義按鈕2執行了");

    }];


    NSArray *array = [NSArray arrayWithObjects:action,action1,action2,nil];

    return array;

}


//在給定的包含row的地方執行復制或粘貼

- (void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender{

    NSLog(@"右邊的方法執行了2");

}


//針對某一特定的row是否編輯菜單應該刪除複製和粘貼

- (BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender{

    NSLog(@"複製");

    return (action == @selector(copy));

}

//是否應該在一個確定的row顯示編輯菜單

- (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath{

    NSLog(@"右邊的方法執行了1");

    return YES;

}



- (void)tableView:(UITableView *)tableView didEndDisplayingFooterView:(UIView *)view forSection:(NSInteger)section{

    NSLog(@"已經結束顯示尾視圖");

}


- (void)tableView:(UITableView *)tableView didEndDisplayingHeaderView:(UIView *)view forSection:(NSInteger)section{

    NSLog(@"已經結束顯示頭視圖");

}


- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{

    NSLog(@"已經結束顯示cell");

}


//要求代表返回一個新的索引路徑重定目標行的一個提出的移動,要與detacemove方法配合使用

- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath{

    return nil;

}


//當表視圖在編輯狀態下時,問代理是否應該縮進指定的行的背景。

- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath{

    return YES;

}


//點擊刪除的"-"之後顯示出來的刪除鍵上面顯示的標題是什麼

- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{

    return @"刪除";

}


//設置編輯的狀態是什麼

//delete: 刪除

//insert: 插入

//delete | insert : 多選

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{

    return UITableViewCellEditingStyleDelete;

}


- (void)tableView:(UITableView *)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath{

    NSLog(@"已經結束編輯了");

}


- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath{

    NSLog(@"將要開始編輯indexPath");

}


- (void)tableView:(UITableView *)tableView willDisplayFooterView:(UIView *)view forSection:(NSInteger)section{

    NSLog(@"將要顯示尾視圖");

}


- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section{

    NSLog(@"將要顯示頭視圖");

}


//設置最大尾高度

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForFooterInSection:(NSInteger)section{

    return 1000;

}


//設置尾高度

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{

    return 100;

}


//預計頭最大高度

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForHeaderInSection:(NSInteger)section{

    return 1000;

}


//設置頭高度

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{

    return 100;

}


//設置尾視圖

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{

    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 40)];

    view.backgroundColor = [UIColor redColor];

    return [view autorelease];

}


//設置頭的視圖

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{

    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 40)];

    view.backgroundColor = [UIColor redColor];

    return [view autorelease];

}


- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath{

    NSLog(@"已經取消選擇");

}


- (NSIndexPath *)tableView:(UITableView *)tableView willDeselectRowAtIndexPath:(NSIndexPath *)indexPath{

    NSLog(@"將要取消選擇");

    return indexPath;

}


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

    NSLog(@"已經點擊了");

}



//某個indexPath將要被點擊的時候執行的方法

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath{

    if (indexPath.row == 0) {

        NSLog(@"哈哈哈");

    }else

    NSLog(@"將要被點擊");

    return indexPath;

}


//accessoryButton被點擊之後執行這段代碼

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{

    NSLog(@"cellbutton被點擊");

}


//當點擊了某一編輯之後,響應這個方法的響應

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{

    NSLog(@"被編輯了");

}


//返回用戶是否可以編輯

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{

    return YES;

}


//返回用戶對這些indexPath都執行了哪些的操作,返回的值是動作的數組

//- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath{

//    NSLog(@"%ld將要被編輯",indexPath.row);

//    return @[@"2",@"4",@"6"];

//}


//當某一行將要顯示內容的時候執行的方法

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{

    NSLog(@"將要顯示");

}


//設置當前行的內容向後移動多少

//- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath{

//    return 20;

//}


//設置可以最大擴充的行高

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath{

    return 200;

}



//設置tableView的行高

//- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

//    return 100;

//}


//cell設置可以循環使用,並且賦值

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

    if (!cell) {

        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"];

    }

    cell.textLabel.text = @"yangxu";

    

//    cell.accessoryType = UITableViewCellAccessoryDetailButton;

    return cell;

}


//設置每個section有多少個row

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

    return 10;

}


//設置tableView裏面有多少個section

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{

    return 10;

}


- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


/*

#pragma mark - Navigation


// In a storyboard-based application, you will often want to do a little preparation before navigation

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    // Get the new view controller using [segue destinationViewController].

    // Pass the selected object to the new view controller.

}

*/


@end



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章