美文网首页iOS技术UI 搭建
iOS展开联动功能的分类列表

iOS展开联动功能的分类列表

作者: Joyinter | 来源:发表于2017-02-10 13:54 被阅读1027次

前言

最近做一个电商类项目,产品要求实现一个类似美团点餐的分类列表,主要需求为:

  • 左边点击某个大分类,视图动态展开显示子分类,缩起已展开的大分类。
  • 左边点击某个小分类,右边自动滑到该分类详细数据。
  • 右边滑动列表时,左边根据右边滑动的商品信息自动展开或收起

要实现上述功能,需要两个UITableview,左边tableview负责展开和收起以及通知右边滑动,右边tableview负责滑动并通知左边应该展开哪一组。

先上最终效果图 <br />

blank.png
  • 左侧TableView结构如下

  • HDLeftTableSectionHeaderView
    HDLeftTableViewCell
    HDLeftTableViewCell
    HDLeftTableSectionHeaderView
    HDLeftTableViewCell
    HDLeftTableViewCell
    • 上图(表)一共有2个Section,每个Section有一个HeaderView两个Cell,展开收起Section分两种情况
      1.* SectionHeaderView的点击事件需要展开当前Section,并关闭其余Section,同时右边触发自动滑动;
      2.* 滑动右边时需要展开对应Section,并关闭其余Section,右边不会触发自动滑动;
      因此 SectionHeaderView需要两个BOOL值来判断当前Section的展开状态:isExpended以及是否为用户点击操作isUserTapped
      关键代码:
    //HeaderView将状态代理出来交给LeftViewModel实现展开、收起功能
    -(void)classifyListHeaderView:(HDLeftTableHeaderView *)classifyHeaderView isExpended:(BOOL)isExpended isUserTapped:(BOOL)isUserTapped;
    //展开
    [self.tableView insertRowsAtIndexPaths:indexArray withRowAnimation:UITableViewRowAnimationAutomatic];
    //收起
    [self.tableView deleteRowsAtIndexPaths:indexArray withRowAnimation:UITableViewRowAnimationAutomatic];
    //将滚动功能代理出去交由RightViewModel实现
    if ([self.delegate respondsToSelector:@selector(classifyLeftTableViewModel:didSelectedAtIndexPath:)]) {
          [self.delegate classifyLeftTableViewModel:self didSelectedAtIndexPath:self.selectedIndexPath];
    }
    
    • 右侧TableView结构如下
    HDRightTableViewSectionCells
    HDRightTableViewSectionCells
    HDRightTableViewSectionCells
    HDRightTableViewSectionCells
    • 右侧共有4个Section每个Section拥有自己的Cells,在左侧Cell的- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 方法里滑动右边TableView
    //滑动到选中Section的第一个Cell
    [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:self.currentSelectedSection] atScrollPosition:UITableViewScrollPositionTop animated:YES];
    
    • 同左侧SectionHeaderView一样,右边的UITableview同样需要BOOL值来区分滑动请求是否是用户发起的,还是左边ViewModel请求的isRequestedFromLeft
      当右侧滑动时,可以利用UITableviewself.tableView.indexPathsForVisibleRows.firstObject.section来判断当前展示的Section
      关键代码:
    -(void)scrollViewDidScroll:(UIScrollView *)scrollView
        if (self.currentSelectedSection != self.tableView.indexPathsForVisibleRows.firstObject.section) {
            NSInteger row = self.tableView.indexPathsForVisibleRows.firstObject.row;
            NSInteger section = self.tableView.indexPathsForVisibleRows.firstObject.section;
            self.currentSelectedSection = section;
            if (self.isRequestedFromLeft == NO) {
                if ([self.delegate respondsToSelector:@selector(rightViewModel:didScrollToIndexPath:)]) {
                    [self.delegate rightViewModel:self didScrollToIndexPath:[NSIndexPath indexPathForRow:row inSection:section]];
                }
            }
        } 
    }
    

    最后只需要循环数据源将左右两边的IndexPath对应好就可以完成想要的功能了。

    使用方法

    本工程已上传至Cocoapods共有仓库,使用时编辑Podfile并添加:

    pod "HDClassifyTable"<br />

    来个总结

    之前用了特别多的开源项目,充分享受到了开源带来的便利,这次终于可以为开源社区做出点自己的贡献了,第一次写文章,还请各位大师斧正。
    最后,感谢HandyFrame的作者Casa Taloyum,本工程页面的主要布局都通过HandyFrame实现,特别的好用,在此强烈推荐。另外这个工程也离不开他的帮助与指导,他的个人主页http://casatwy.com/

    相关文章

    • iOS展开联动功能的分类列表

      前言 最近做一个电商类项目,产品要求实现一个类似美团点餐的分类列表,主要需求为: 左边点击某个大分类,视图动态展开...

    • 超简单实现iOS列表的索引功能

      超简单实现iOS列表的索引功能 超简单实现iOS列表的索引功能

    • tableView列表联动

      tableView列表联动 tableView列表联动

    • iOS 多级分类菜单 多级列表 仿口碑分类菜单 电商筛选菜单

      ClassifyMenuDemo 多级分类菜单 多集列表展开合并 仿口碑分类效果 ClassifyMenuDemo...

    • 外卖App双列表联动

      双列表联动 用过了那么多的外卖App,总结出一个规律,那就是“所有的外卖App都有双列表联动功能”。哈哈哈哈,这是...

    • iOS 列表(UITableView)展开

      需要做一个列表展开功能,先分析一下思路。1.列表展开需要设置tableVbiew的类型是 “组” 类型2.数据源的...

    • iOS - 常用GitHub_UI

      1,主流APP分类切换滚动视图2,iOS列表的索引功能3,刷新控件 MJRefresh4,输入框自动上移 IQKe...

    • 模块

      小程序的商城后台功能模块有【首页、专题列表、专题详情、分类列表、分类详情、品牌列表、品牌详情、新品首发、人气推荐、...

    • 2019-05-17

      需求来源:小程序微信商品列表的左右联动 现在最流行的带分类商品列表,就是需要滚动到不同的商品的时候,自动聚焦到当前...

    • 解决列表展开闭合卡顿的问题

      tableview折叠列表,再展开每个section对应的列表时,tableview总是会出现胡乱漂移,iOS10...

    网友评论

      本文标题:iOS展开联动功能的分类列表

      本文链接:https://www.haomeiwen.com/subject/egpgittx.html