iOS tableView代理详解

1、UITableViewDataSource数据源方法

// 返回第section组中有多少行

-(NSInteger)tableView:(UITableView*)tableViewnumberOfRowsInSection:(NSInteger)section;// 

返回多少组,没实现该方法,默认为1

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

2、UITableViewDelegate代理方法

// 即将显示tableviewcell时调用

-(void)tableView:(UITableView*)tableViewwillDisplayCell:(UITableViewCell*)cellforRowAtIndexPath:(NSIndexPath*)indexPath;

// 即将显示header时调用,在cell之后调用

-(void)tableView:(UITableView*)tableViewwillDisplayHeaderView:(UIView*)viewforSection:(NSInteger)sectionNS_AVAILABLE_IOS(6_0);

// 即将显示footer时调用,在header之后调用

-(void)tableView:(UITableView*)tableViewwillDisplayFooterView:(UIView*)viewforSection:(NSInteger)sectionNS_AVAILABLE_IOS(6_0);

// 在删除cell之后调用,停止显示cell的时候调用,界面不显示cell时。

-(void)tableView:(UITableView*)tableViewdidEndDisplayingCell:(UITableViewCell*)cellforRowAtIndexPath:(NSIndexPath*)indexPathNS_AVAILABLE_IOS(6_0);

// 停止显示header的时候调用

-(void)tableView:(UITableView*)tableViewdidEndDisplayingHeaderView:(UIView*)viewforSection:(NSInteger)sectionNS_AVAILABLE_IOS(6_0);

// 停止显示footer的时候调用

-(void)tableView:(UITableView*)tableViewdidEndDisplayingFooterView:(UIView*)viewforSection:(NSInteger)sectionNS_AVAILABLE_IOS(6_0);

3、高度代理方法

// 在设置每行cell的高度,header的高度,footer的高度// 设置某行cell高度

-(CGFloat)tableView:(UITableView*)tableViewheightForRowAtIndexPath:(NSIndexPath*)indexPath;

// 设置header高度

-(CGFloat)tableView:(UITableView*)tableViewheightForHeaderInSection:(NSInteger)section;

// 设置footer高度-(CGFloat)tableView:(UITableView*)tableViewheightForFooterInSection:(NSInteger)section;

4、设置分组View的方法

// 返回某个section对应的header标题

-(NSString *)tableView:(UITableView*)tableViewtitleForHeaderInSection:(NSInteger)section;

// 返回某个section对应的footer标题

-(NSString *)tableView:(UITableView*)tableViewtitleForFooterInSection:(NSInteger)section;

// 设置第section分组的header

-(UIView *)tableView:(UITableView*)tableViewviewForHeaderInSection:(NSInteger)section;

// 设置第section分组的footer

-(UIView *)tableView:(UITableView*)tableViewviewForFooterInSection:(NSInteger)section;

5、操作cell时调用的方法

// cell选中时调用

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

// cell取消选中时调用-(void)tableView:(UITableView*)tableViewdidDeselectRowAtIndexPath:(NSIndexPath*)indexPathNS_AVAILABLE_IOS(3_0);

6、编辑模式相关的代理方法

// 返回每一行cell的编辑模式, 可以再次设置add或者删除操作。

-(UITableViewCellEditingStyle)tableView:(UITableView*)tableVieweditingStyleForRowAtIndexPath:(NSIndexPath*)indexPath;/

/ cell左滑删除时,删除按钮的标题

-(NSString *)tableView:(UITableView*)tableViewtitleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath*)indexPathNS_AVAILABLE_IOS(3_0);

// 自定义编辑左滑后出现的界面。  不止只有一个delete按钮, 可以自行定义,返回一个数组。数组中放着UITableviewRowAction

-(NSArray *)tableView:(UITableView*)tableVieweditActionsForRowAtIndexPath:(NSIndexPath*)indexPathNS_AVAILABLE_IOS(8_0);

// 未实现 默认为yes,进入编辑时,cell是否缩进。  在开启编辑状态时调用

。-(BOOL)tableView:(UITableView*)tableViewshouldIndentWhileEditingRowAtIndexPath:(NSIndexPath*)indexPath;/

/ 右滑准备进行编辑的时候 调用。 将setediting = yes时不调用

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

// 完成编辑的时候调用

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

6、索引

//返回要显示的section索引标题

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

// return list of section titles to display in section index view (e.g. "ABCD...Z#")// 点击右侧索引表项时调用

-(NSInteger)tableView:(UITableView*)tableViewsectionForSectionIndexTitle:(NSString*)titleatIndex:(NSInteger)index;

// 返回指定点所在位置的indexPath

-(NSIndexPath *)indexPathForRowAtPoint:(CGPoint)point;/

/ 返回指定cell所在的indexPath

-(NSIndexPath *)indexPathForCell:(UITableViewCell*)cell;

// 返回指定范围rect中的所有cell的indexPath

-(NSArray *)indexPathsForRowsInRect:(CGRect)rect;

 返回索引indexPath所指向的cell。

-(UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath*)indexPath;

8、cell刷新方法

// 重新载入tableview所有cell  一般是在数据源有改变的时候

- (void)reloadData;

// 重新载入,section的索引标题。

- (void)reloadSectionIndexTitlesNS_AVAILABLE_IOS(3_0);// reloads the index bar.

8、UITableView滚动方法

// 根据传入的indexPath,滚动到相对应的位置,第二个参数是控制对应的cell再滚动后处于tableview的顶部/底部/中部等

- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPathatScrollPosition:(UITableViewScrollPosition)scrollPositionanimated:(BOOL)animated;

// 滚动到被选中项。  滚动后处于tableview的顶部/底部/中部等

- (void)scrollToNearestSelectedRowAtScrollPosition:(UITableViewScrollPosition)scrollPositionanimated:(BOOL)animated

9、插入,删除,刷新,移动section组

// 插入,删除,刷新,移动section组// 插入section

-(void)insertSections:(NSIndexSet*)sectionswithRowAnimation:(UITableViewRowAnimation)animation;/

/ 删除section

-(void)deleteSections:(NSIndexSet*)sectionswithRowAnimation:(UITableViewRowAnimation)animation;

// 刷新section

-(void)reloadSections:(NSIndexSet*)sectionswithRowAnimation:(UITableViewRowAnimation)animationNS_AVAILABLE_IOS(3_0);

// 移动section

-(void)moveSection:(NSInteger)sectiontoSection:(NSInteger)newSectionNS_AVAILABLE_IOS(5_0);


1、多选

注意点:

1、[_tableView setEditing:YES animated:YES];//设为为编辑状态,不然不会出现左侧圆圈

2、设置编辑状态的代理。

编辑状态UITableViewCellEditingStyle有三种模式

UITableViewCellEditingStyleDelete

UITableViewCellEditingStyleInsert

UITableViewCellEditingStyleNone

多选框的风格, 只需要风格同时包含UITableViewCellEditingStyleDelete和UITableViewCellEditingStyleInsert就可以了

- (UITableViewCellEditingStyle)tableView:(UITableView*)tableView editingStyleForRowAtIndexPath:(NSIndexPath*)indexPath{returnUITableViewCellEditingStyleDelete|UITableViewCellEditingStyleInsert;}

3、选中是会出现蓝色背景,要是感觉不好看,可以修改

cell.multipleSelectionBackgroundView = [UIViewnew];

4、修改有点击选中图标的颜色

cell.tintColor = [UIColor redColor];

5、不想使用默认图标的话,也可以在自定义

-(void)layoutSubviews{for(UIControl*controlinself.subviews){if([control isMemberOfClass:NSClassFromString(@"UITableViewCellEditControl")]){for(UIView*vincontrol.subviews)            {if([v isKindOfClass: [UIImageViewclass]]) {UIImageView*img=(UIImageView*)v;if(self.selected) {                        img.image=[UIImageimageNamed:@"xuanzhong_icon"];                    }else{                        img.image=[UIImageimageNamed:@"weixuanzhong_icon"];                    }                }            }        }    }    [superlayoutSubviews];}

//适配第一次图片为空的情况

- (void)setEditing:(BOOL)editing animated:(BOOL)animated{    [supersetEditing:editing animated:animated];for(UIControl*controlinself.subviews){if([control isMemberOfClass:NSClassFromString(@"UITableViewCellEditControl")]){for(UIView*vincontrol.subviews)            {if([v isKindOfClass: [UIImageViewclass]]) {UIImageView*img=(UIImageView*)v;if(!self.selected) {                        img.image=[UIImageimageNamed:@"weixuanzhong_icon"];                    }                }            }        }    }}

6、第一次点击选中,第二次点击删除

//已经选中了某一行- (void)tableView:(UITableView *)tableViewdidSelectRowAtIndexPath:(NSIndexPath *)indexPath{if([_selectArraycontainsObject:_dataSource[indexPath.row]]) {return;    }    [_selectArrayaddObject:_dataSource[indexPath.row]];}//不选的时候删除- (void)tableView:(UITableView *)tableViewdidDeselectRowAtIndexPath:(NSIndexPath *)indexPath{    [_selectArrayremoveObject:indexPath];}

7、全选选中与清空

- (void)SelectButton:(UIButton*)button{    button.selected = !button.selected;if(button.selected) {//==================全选================//选中tableView中所有的indexPathNSArray * array = [_tableViewindexPathsForRowsInRect:CGRectMake(0,0, SCREEN_WIDTH,_tableView.contentSize.height)];for(NSIndexPath * indexPathinarray) {            [_tableViewselectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];        }        [_selectArrayremoveAllObjects];        [_selectArrayaddObjectsFromArray:_dataSource];    }else{//============全选清空====================for(NSIndexPath * indexPathin_selectArray) {            [_tableViewdeselectRowAtIndexPath:indexPath animated:YES];        }//将选中下标数组清空[_selectArrayremoveAllObjects];        [_tableViewreloadData];    }  }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容