美文网首页
iOS tableView代理详解

iOS tableView代理详解

作者: 小杨的app | 来源:发表于2017-04-28 16:09 被阅读271次

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

相关文章

网友评论

      本文标题:iOS tableView代理详解

      本文链接:https://www.haomeiwen.com/subject/scqazttx.html