最近公司需求 需要做一个有很多单选框的页面 研究了一下 花了一天时间 写出来了(新手 大家见谅)
先说一下实现思路:UITableview嵌套UICollectionview ,每一个UITableviewCell里面嵌套一个UICollectionview,并且将UICollectionview的数据源和代理通过方法传给VC,在通过运行时给UICollectionview动态添加2个属性,第一个是这个UICollectionview所在的UITableviewCell的对应的indexpath,第二个是UICollectionview选中的UICollectionviewcel
废话不多说 开始吧
设置数据源 这里取随机数(可能每次题的数量不一样,选项的数量也不一样)
```
- (void)initData {
//设置UITable和UICollection rows数量
constNSInteger numberOfTableViewRows = arc4random_uniform(5) +2;
//const NSInteger numberOfCollectionViewCells = arc4random_uniform(10) +3;
//设置数据源
for(NSIntegeri =0; i < numberOfTableViewRows; i ++) {
NSMutableArray*collectionRowArray = [NSMutableArrayarray];
NSIntegercount =arc4random_uniform(2) +2;
for(NSIntegerj =0; j < count ; j ++) {
//UIColor *collectionRowCellColor = randomColor;
//[collectionRowArray addObject:collectionRowCellColor];
NSString*option = [NSStringstringWithFormat:@"选项%ld",j +1];
[collectionRowArrayaddObject:option];
}
[self.dataSourceArrayaddObject:collectionRowArray];
}
}
```
数据源设置完了 下一个就是创建UITableview和设置UITableview的数据源和代理 这个比较简单就不贴代码了
关键的来了 新建UITableviewcell的子类,ContentCollectionTableViewCell给这个子类添加一个UICollectionView的属性,并在初始化方法里添加到cell.contentview上,定义一个公有方法设置这个collectionview的数据源和代理,方法名称为:
```
- (void)setCollecitonDelagate:(id) delegate indexPath:(NSIndexPath*)index;
```
```
- (void)setCollecitonDelagate:(id) delegate indexPath:(NSIndexPath*)index{
if(!self.collecitonView.delegate&& !self.collecitonView.dataSource) {
self.collecitonView.delegate= delegate;
self.collecitonView.dataSource= delegate;
}
objc_setAssociatedObject(self.collecitonView,collectionCellIndexPathInTableCell, index,OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
```
通过这个方法 实现了collecitonView的数据源和代理 以及collecitonView对应的UITableCell的indexpath;
网友评论