如图所示,近期公司要我负责这个项目的二期开发和维护工作,当我从SVN的上下载代码后我的内心是崩溃的:
是的,如果你看了首页代码的行数你就可以理解我当时的心情了:
1200多行的代码!因为一期的开发是外包给别人做的,所以...
既来之则安之,我结合首页的结构和之前的代码,决定对首页的代码进行重构,我的修改如下:
1、对于最上面的自定义NavigationController(即上图的蓝线框部分),这里的修改,我将其写一个类,继承自UIView,在viewDidLoad方法中调用初始化并传值;
2、轮播图(上图绿线框部分)没有做修改,放在Tableview的第一个Cell中;
3、主要内容(上图黑线框部分),之前的做法是,Tableview一个Cell中放2个View,左边一个右边一个,通过Tag值来标识每个VIew,这块在赋值和点击的时候做了很多判断,具体的...其实我也没仔细研究;最终我决定用TableViewCell嵌套UICollectionView的方法重构这部分代码,我的思路如下图:
我在TableviewCell中嵌套一个CollectionView,每次刷新Tableview后,根据服务器返回的数组长度来动态改变TableviewCell的高度,如下图所示,这是我修改后的storyboard中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:如果有什么待优化的地方或大家有更好的解决方案,求指点。