美文网首页iOS开发小例子JG专题
iOS Cell中嵌套CollectionView

iOS Cell中嵌套CollectionView

作者: 小時間光 | 来源:发表于2016-03-03 17:26 被阅读5820次
效果图

如图所示,近期公司要我负责这个项目的二期开发和维护工作,当我从SVN的上下载代码后我的内心是崩溃的:

是的,如果你看了首页代码的行数你就可以理解我当时的心情了:

1200多行的代码!因为一期的开发是外包给别人做的,所以...

既来之则安之,我结合首页的结构和之前的代码,决定对首页的代码进行重构,我的修改如下:

1、对于最上面的自定义NavigationController(即上图的蓝线框部分),这里的修改,我将其写一个类,继承自UIView,在viewDidLoad方法中调用初始化并传值;

2、轮播图(上图绿线框部分)没有做修改,放在Tableview的第一个Cell中;

3、主要内容(上图黑线框部分),之前的做法是,Tableview一个Cell中放2个View,左边一个右边一个,通过Tag值来标识每个VIew,这块在赋值和点击的时候做了很多判断,具体的...其实我也没仔细研究;最终我决定用TableViewCell嵌套UICollectionView的方法重构这部分代码,我的思路如下图:

我的思路图

我在TableviewCell中嵌套一个CollectionView,每次刷新Tableview后,根据服务器返回的数组长度来动态改变TableviewCell的高度,如下图所示,这是我修改后的storyboard中Tableview结构图:

Tableview结构图

在Controller中实现Tableview的回调方法,

当接收到服务器的数据后,利用MJExtension框架将从服务器获取的数据转换为Model,传给Controller,此时刷新Tableview,通过一个变量来记录上拉刷新的次数,并计算TableviewCell的高度;

/**
 *记录上拉刷新的次数默认为2
 */
@property(assign,nonatomic)intNum;
/**
 *记录上拉刷新的次数默认为1 
 */
@property(assign,nonatomic)intNum;
- (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath
{
   returnself.Num*155+5;
}

在TableviewCell中实现UICollectionView的回调方法。

@interface HomeTableViewCell :UITableViewCell<UICollectionViewDelegate,UICollectionViewDataSource>

在TableviewCell中通过代理来传点击的是哪一个CollectionViewCell,


/**
 * 代理,用来传递点击的是第几行,当触CollectionView的时候
 */
 @protocoldelegateColl

  -(void)ClickCooRow :(int)CellRow;

@end
@property(weak,nonatomic)id <delegateColl> delegateColl;
-(void)collectionView:(UICollectionView*)collectionView didSelectItemAtIndexPath:(NSIndexPath*)indexPath
{
   UICollectionViewCell* cell = (UICollectionViewCell*)[collectionViewcellForItemAtIndexPath:indexPath];
   cell.backgroundColor= [UIColorwhiteColor];
   //代理传值
  if([self.delegateCollrespondsToSelector:@selector(ClickCooRow:)])
  {
     self.delegateCollClickCooRow:indexPath.row];
  }
}

在Controller中实现回调方法,用来接收点击的是哪张图片:



#pragma mark -代理用来接收点击的是第几个
-(void)ClickCooRow :(int)CellRow
{
printf("\n点击的是==========%d\n",CellRow);
}

重构后,增加了2个类和1个Model类,但是首页的代码也瘦了很多。逻辑也清晰了,如下图是我重构后的首页代码结构和代码行数:

由于这是公司的项目不能提供代码了,笔者写了个Demo供参考,请戳:下载地址

PS:如果有什么待优化的地方或大家有更好的解决方案,求指点。

相关文章

网友评论

  • 峰子1994:再不问下就是我重用了cell那collection咋弄
  • eac6ebd56d25:楼主你好,tableviewCell我也作为Collectionview的数据源和代理,但是每次单击Collectionview的Cell无效果,长按松开才进入collectionView的点击代理方法,这是什么情况你知道吗?
  • 牛蛋:大神 在吗 ? 我按照你做的demo tableViewcell中能够显示出来 但是collection的 didSelectItemAtIndexPath不被调用啊 是怎么回事啊
    小時間光:@牛蛋 没有实现代理吧。
  • 2068e5e51f60:把代码放到```里面吧,看起来有点乱

本文标题:iOS Cell中嵌套CollectionView

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