UITableView代理协议总结
1./**
一共有多少组
*/
- (
NSInteger
)numberOfSectionsInTableView:(
UITableView
*)tableView{
return self . personGroups . count ;
}
2./** 每一组有多少行 */
- ( NSInteger )tableView:( UITableView *)tableView numberOfRowsInSection:( NSInteger )section
{
SUNPersonGroupInfo *personGroupInfo = self . personGroups [section];
return personGroupInfo. persons . count ;
}
3./** 显示每一行的内容 */
-(
UITableViewCell
*)tableView:(
UITableView
*)tableView cellForRowAtIndexPath:(
NSIndexPath
*)indexPath
{// 由于 cell 的复用机制,会先从自动释放池中找有没有空闲的名字相同的 cell ,如果有就复用,没有就创建新的,
static NSString *cellName= @"cell" ;
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier :cellName];
if (cell== nil ){
cell=[[ UITableViewCell alloc ] initWithStyle : UITableViewCellStyleSubtitle reuseIdentifier :cellName];
}
// 由于 cell 的复用机制,需要把 cell 的设置全部清空,不然下面的复用的时候会出错。
cell. textLabel . text = nil ;
cell. detailTextLabel . text = nil ;
cell. accessoryType = UITableViewCellAccessoryNone ;
// 分割线的设置
cell. selectionStyle = UITableViewCellSelectionStyleNone ;
cell. textLabel . font = nil ;
if (indexPath. section == 0 ){
// 设置 cell 的主标题和副标题 (cell 的 style 不一样,设置的效果也不一样,有的还没有副标题 )
cell. textLabel . text = @" 主标题 " ;
cell. detailTextLabel . text = @" 副标题 " ;
// 设置 cell 右边附属按钮的式样,只有下面这个样式可以点击,其他样式都不能点击
cell. accessoryType = UITableViewCellAccessoryDetailDisclosureButton ;
cell. selectionStyle = UITableViewCellSelectionStyleBlue ;
cell. textLabel . font =[ UIFont systemFontOfSize : 20 ];
cell. imageView . image =[ UIImage imageNamed : @"001_1" ];
//cell 右边视图附属视图
UIButton *btn=[ UIButton buttonWithType : UIButtonTypeRoundedRect ];
[btn addTarget : self action : @selector (btnClick) forControlEvents : UIControlEventTouchUpInside ];
[btn setTitle : @" 有吗 " forState : UIControlStateNormal ];
btn. frame = CGRectMake ( 0 , 0 , 50 , 30 );
cell. accessoryView =btn;
// 选中后的颜色又不发生改变,进行下面的设置
//cell.selectionStyle = UITableViewCellSelectionStyleNone;
// 不需要分割线
//tableView.separatorStyle=UITableViewCellSeparatorStyleNone;
} else {
cell. textLabel . text = @" 第二个 cell" ;
}
return cell;
}
注意:
返回指定的row 的cell。这个地方是比较关键的地方,一般在这个地方来定制各种个性化的 cell元素。这里只是使用最简单最基本的cell 类型。其中有一个主标题 cell.textLabel 还有一个副标题cell.detailTextLabel, 还有一个 image在最前头 叫cell.imageView. 还可以设置右边的图标,通过cell.accessoryType 可以设置是饱满的向右的蓝色箭头,还是单薄的向右箭头,还是勾勾标记。
4.
//
这个方法返回指定的
row
的高度。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
5. // 这个方法返回指定的 section 的 header view 的高度。
- (CGFloat)tableView:( UITableView *)tableView heightForHeaderInSection:( NSInteger )section;
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
5. // 这个方法返回指定的 section 的 header view 的高度。
- (CGFloat)tableView:( UITableView *)tableView heightForHeaderInSection:( NSInteger )section;
6. // 这个方法返回指定的 section的footer view 的高度。
- (CGFloat)tableView:( UITableView *)tableView heightForFooterInSection:( NSInteger )section;
7./** 返回标题文字 */
- (
NSString
*)tableView:(
UITableView
*)tableView titleForHeaderInSection:(
NSInteger
)section
{
SUNPersonGroupInfo *personGroup = self . personGroups [section];
return personGroup. title ;
}
8./** 右侧索引 */
- ( NSArray *)sectionIndexTitlesForTableView:( UITableView *)tableView
{
return [ self . personGroups valueForKey : @"title" ];
}
{
SUNPersonGroupInfo *personGroup = self . personGroups [section];
return personGroup. title ;
}
8./** 右侧索引 */
- ( NSArray *)sectionIndexTitlesForTableView:( UITableView *)tableView
{
return [ self . personGroups valueForKey : @"title" ];
}
//
开始编辑,一旦
editing == YES
就默认开启删除模式
如果 self
.
tableView
.
editing
= NO
;
9.// 编辑模式
- (
UITableViewCellEditingStyle
)tableView:(
UITableView
*)tableView editingStyleForRowAtIndexPath:(
NSIndexPath
*)indexPath
{
return UITableViewCellEditingStyleInsert ;
}
return UITableViewCellEditingStyleInsert ;
}
UITableViewCellEditingStyleNone,
UITableViewCellEditingStyleDelete, 删除
UITableViewCellEditingStyleInsert 添加
UITableViewCellEditingStyleDelete, 删除
UITableViewCellEditingStyleInsert 添加
10.//
可以
显示拖动控件
- (
BOOL
)tableView:(
UITableView
*)tableView canMoveRowAtIndexPath:(
NSIndexPath
*)indexPath
{
return YES ;
}
{
return YES ;
}
11.//
当用户选中某个行的
cell
的时候,回调用这个。但是首先,必须设置
tableview
的一个属性为可以
select
才行。
-( void )tableView:( UITableView *)tableView didSelectRowAtIndexPath:( NSIndexPath *)indexPath
{
NSLog ( @" 第 %d 个 section 中第 %d 行的被点击 " ,indexPath.section,indexPath. row );
}
注意:如果不希望响应select,那么就可以用下面的代码设置属性:
TableView.allowsSelection=NO;
-( void )tableView:( UITableView *)tableView didSelectRowAtIndexPath:( NSIndexPath *)indexPath
{
NSLog ( @" 第 %d 个 section 中第 %d 行的被点击 " ,indexPath.section,indexPath. row );
}
注意:如果不希望响应select,那么就可以用下面的代码设置属性:
TableView.allowsSelection=NO;
12.//
如何设置
tableview
每行之间的
分割线
如果不需要分割线,那么就设置属性为
UITableViewCellSeparatorStyleNone
即可。
self .tableView.separatorStyle=UITableViewCellSeparatorStyleSingleLine;
13.// 如何设置 tableview cell 的背景颜色
- ( UITableViewCell *)tableView:( UITableView *)tableView cellForRowAtIndexPath:( NSIndexPath *)indexPath
self .tableView.separatorStyle=UITableViewCellSeparatorStyleSingleLine;
13.// 如何设置 tableview cell 的背景颜色
- ( UITableViewCell *)tableView:( UITableView *)tableView cellForRowAtIndexPath:( NSIndexPath *)indexPath
{
// 设置背景颜色
cell.contentView.backgroundColor=[UIColor colorWithRed: 0.957 green: 0.957 blue: 0.957 alpha: 1 ];
}
// 这个函数响应,用户点击 cell 右边的 箭头(如果有的话)
- ( void )tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
// 如何设置 tableview 可以被编辑,首先要进入编辑模式: 如果要退出编辑模式,肯定就是设置为 NO
[TableView setEditing: YES animated: YES ];
// 返回当前 cell 要执行的是哪种编辑,下面的代码是 返回 删除 模式
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
// 通知告诉用户编辑了 哪个 cell ,对应上面的代码,我们在这个函数里面执行删除 cell 的操作。
-( void ) tableView:(UITableView *)aTableView commitEditingStyle:(UITableViewCellEditingStyle) editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
// 设置背景颜色
cell.contentView.backgroundColor=[UIColor colorWithRed: 0.957 green: 0.957 blue: 0.957 alpha: 1 ];
}
// 这个函数响应,用户点击 cell 右边的 箭头(如果有的话)
- ( void )tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
// 如何设置 tableview 可以被编辑,首先要进入编辑模式: 如果要退出编辑模式,肯定就是设置为 NO
[TableView setEditing: YES animated: YES ];
// 返回当前 cell 要执行的是哪种编辑,下面的代码是 返回 删除 模式
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
// 通知告诉用户编辑了 哪个 cell ,对应上面的代码,我们在这个函数里面执行删除 cell 的操作。
-( void ) tableView:(UITableView *)aTableView commitEditingStyle:(UITableViewCellEditingStyle) editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
2.//滑动删除
{
return @" 删除 " ;
}
- (
void
)tableView:(
UITableView
*)tableView commitEditingStyle:(
UITableViewCellEditingStyle
)editingStyle forRowAtIndexPath:(
NSIndexPath
*)indexPath
{
if (editingStyle == UITableViewCellEditingStyleInsert ) {
}
}
{
if (editingStyle == UITableViewCellEditingStyleInsert ) {
}
}
3.
//
删除的时候,左边显示的按钮,默认是
delegate;
-(
NSString
*)tableView:(
UITableView
*)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(
NSIndexPath
*)indexPath{
return @" 删除 " ;
}
注意:
默认有一个UITableView,并且self.tableview == self.view
使用以下两条语句可以跟踪验证NSLog(@"%p %p", self.view, self.tableView);
NSLog(@"%@", self.view.class);