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



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