iOS Cell中嵌套CollectionView

效果图

如图所示,近期公司要我负责这个项目的二期开发和维护工作,当我从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:如果有什么待优化的地方或大家有更好的解决方案,求指点。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iOS网络架构讨论梳理整理中。。。 其实如果没有APIManager这一层是没法使用delegate的,毕竟多个单...
    yhtang阅读 10,652评论 1 23
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,196评论 4 61
  • 夏日的早晨,闷热的感觉随着灰厌厌的太阳,一点点加码!温热中的人们像青蛙一样,快乐的适应着,女人们的裙子肥大而飘逸,...
    石头流泪阅读 1,534评论 0 2
  • 写这篇文章之前,我正靠在办公室的椅背上刷一篇心灵鸡汤,冬日的暖阳从窗户里照进来,榨干了我焦躁的内心最后一丝水分。我...
    刘辛也阅读 3,561评论 0 1
  • 批内容和情感:本文通过写白杨树的外在形象美和内在的精神品格,表达了对白杨树的赞美,以及赞美了像白杨树正直、朴质、坚...
    春光里的小米阅读 13,604评论 0 3