美文网首页
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