原理是在点击单元格的时候给cell添加一个view蓝色的是新添加的视图
来看代码
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSInteger section = [indexPath section];
NSInteger row = [indexPath row];
NSString *key = [self.key objectAtIndex:section];
NSArray *vales = [self.name objectForKey:key];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:TableIdentifier];
if ( tableView.tag == 1) {
cell.textLabel.text = [vales objectAtIndex:row];
}else{
cell.textLabel.text = [filervale objectAtIndex:row];
}
UIView *mainView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.tabview.bounds.size.width, 55)];
mainView.layer.backgroundColor = [UIColor colorWithRed:233/255.0 green:0/255.0 blue:0/255.0 alpha:1].CGColor;
mainView.layer.borderColor = [UIColor colorWithRed:255/255.0 green:255/255.0 blue:0/255.0 alpha:1].CGColor;
mainView.layer.borderWidth = 0.5;
mainView.layer.masksToBounds = YES;
[cell addSubview:mainView];
return cell;
}
这里添加一个手势,就是点击cell时触发
-(void)addGestureRecognizerForView:(UITableViewCell*)cell action:(SEL)action
{
UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:action];
[cell addGestureRecognizer:gesture];
}
- (void)tableViewTouchInView:(UITapGestureRecognizer *)gesture
{
UITableViewCell *cell = (UITableViewCell*)gesture.view;
NSIndexPath *indexpath = [self.tabview indexPathForCell:cell];
if ( self.selectRow == indexpath.row ) {
self.selectRow = -1;
}else
self.selectRow = indexpath.row;
NSArray *array = [NSArray arrayWithObject:indexpath];
[self.tabview reloadRowsAtIndexPaths:array withRowAnimation:UITableViewRowAnimationAutomatic];
}
这里是即将显示时判断是否是选中的那行如果是添加视图并设置高度
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
[self addGestureRecognizerForView:cell action:@selector(tableViewTouchInView:)];
if ( self.selectRow == indexPath.row ) {
self.ExpandView.frame = CGRectMake(0, 55, self.tabview.bounds.size.width, 55);
[cell addSubview:self.ExpandView];
}
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if ( self.selectRow == indexPath.row ) {
return 110;
}else
return 56;
}