点击HeadView 实现对cell动态下拉一个TableView,实现对SectionHeader悬停进行设置

来源:互联网 发布:js页面加载完成后跳转 编辑:程序博客网 时间:2024/05/20 13:14

想要在TableView中实现动态添加某一个Cell被点击后,展开显示其他的UIView,简单的方式是可以在点击某个cell时,修改另外一个cell(重画另一个UIView的cell,默认高度未0,这样就显示不出来)修改高度,并且重载一下TableView,简单代码如下:

-(void)headViewClick:(UIButton*)sender {        NSIndexPath *tagPath = [NSIndexPath indexPathForItem:0 inSection:sender.tag];    NSNumber *object = [NSNumber numberWithInt:sender.tag];    BOOL onShow=NO;        if (![sectionHeaderHover containsObject:object]) {        // 需要展开的添加到数组中        [sectionHeaderHover addObject:object];        onShow = YES;    } else {        //已经在数组中得,说明已经展开,再次点击将它移除        [sectionHeaderHover removeObject:object];    }        // 注意这个一定要在调用 cellForRowAtIndexPath 前,否则cell画出会错乱,因为这个调用后,马上回对tagPath的Cell重画    //而在cellForRowAtIndexPath后调用,addsubview 会被更新掉    [self.contentTableView reloadRowsAtIndexPaths:@[tagPath] withRowAnimation:UITableViewRowAnimationAutomatic];    if (onShow) {        if (sectionHeaderHover == nil) {            sectionHeaderHover = [[NSMutableArray alloc]init];        }        // 获取 tag 对应的cell view,这里可以对view重新设置 在伸展后的view        UITableViewCell *cell = (id)[self.contentTableView cellForRowAtIndexPath:tagPath];        TagView *view = [[TagView alloc]initWithFrame:CGRectMake(0, 0, 320, 150)];        [view setData:sectionArray[sender.tag]];        [cell addSubview:view];    }        }

修改cell 高度

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {    if (self.contentTableView == tableView) {                NSNumber *object = [NSNumber numberWithInt:indexPath.section];                if (indexPath.row == 0 ) {            if ([sectionHeaderHover containsObject:object]) {                return 150;            } else {                return 0;            }        }    }        return -1;}

UITableView 系统默认Head会悬停,在不需要这个特效时,可以采用scroll滑动的位置来进行确认是否偏移

-(void)scrollViewDidScroll:(UIScrollView *)scrollView {//    if (scrollView == self.myTableView)    {        //YOUR_HEIGHT 为最高的那个headerView的高度//        CGFloat sectionHeaderHeight = 20;        if (scrollView.contentOffset.y<=sectionHeaderHeight&&scrollView.contentOffset.y>=0) {            scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0);        } else if (scrollView.contentOffset.y>=sectionHeaderHeight) {            scrollView.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight, 0, 0, 0);        }    }}

测试例子:http://download.csdn.net/detail/huang3838438/7785763


0 0