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]; } }
网友评论