iOS中 单选框的实现

2017-07-05  本文已影响442人  悠辰清泪

最近公司需求 需要做一个有很多单选框的页面 研究了一下 花了一天时间 写出来了(新手 大家见谅)

先说一下实现思路: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;

上一篇下一篇

猜你喜欢

热点阅读