今天在帮朋友解决问题的时候碰见了一个问题,点击分组表格的表头获取当前的section。在协议方法中有点击cell的方法,但没有点击表头的协议方法。当时没有思路,只想着怎么解决。所以用了比较愚蠢的办法:在创建分组表格的时候,就把当前的section复制给button的tag值,当改变分组表格时,会刷新表格,重新复制,这样确实是解决了问题。不过通过询问大神后,得到另外一种方法,分享给大家。
-
首先让大家看一下效果图
这里演示的是自定义分组表格的表头。我们只需要在创建表头的协议方法中执行这样的代码:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
TableViewHeader *view = [[TableViewHeader alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 20)];
view.name.text = [NSString stringWithFormat:@"第%@分区", @(section)];
view.section = section;//以属性的方式把当前的section传过去
view.didSelectHandler = ^(NSInteger section) {
//就可以在语句块中写你要执行的方法了
NSLog(@"当前section为:%zd", section);
};
return view;
}
自定义表头的代码:
-
.h文件
@interface TableViewHeader : UIView
@property (nonatomic, strong) UILabel *name;
@property (nonatomic, assign) NSInteger section;
@property (nonatomic, copy) void (^didSelectHandler) (NSInteger section);
@end
-
.m文件
- (instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame])
{
//设置表头的背景颜色
self.backgroundColor = [UIColor groupTableViewBackgroundColor];
//给整个表头添加手势
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap)];
[self addGestureRecognizer:tap];
//布局
self.name = [[UILabel alloc] initWithFrame:CGRectMake(150, 10, 200, 20)];
self.name.font = [UIFont boldSystemFontOfSize:18];
[self addSubview:self.name];
}
return self;
}
#pragma mark - 点击手势方法
- (void)onTap
{//实现block语句块
if (self.didSelectHandler)
{
self.didSelectHandler(_section);
}
}
其实还有蛮多方法的。