iOS技术UI 搭建

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

2017-02-10  本文已影响1027人  Joyinter

前言

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

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

先上最终效果图 <br />

blank.png
  • 左侧TableView结构如下

  • HDLeftTableSectionHeaderView
    HDLeftTableViewCell
    HDLeftTableViewCell
    HDLeftTableSectionHeaderView
    HDLeftTableViewCell
    HDLeftTableViewCell
    //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];
    }
    
    HDRightTableViewSectionCells
    HDRightTableViewSectionCells
    HDRightTableViewSectionCells
    HDRightTableViewSectionCells
    //滑动到选中Section的第一个Cell
    [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:self.currentSelectedSection] atScrollPosition:UITableViewScrollPositionTop animated:YES];
    
    -(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/

    上一篇 下一篇

    猜你喜欢

    热点阅读