我有一个tableview,在这个tableview中我有四行,在每行中我以编程方式添加了一个集合视图,我检查如果它是我的第一行我应该注册集合视图单元格的第一个nib,如果它是我的第二行,我应该注册集合视图单元格的第二个笔尖,依此类推,而不仅仅是重新加载集合视图。我使用下面的代码: -
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"cellID"];
if(cell==nil){
cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cellID"];
cell.selectionStyle=UITableViewCellSelectionStyleNone;
}
[cell.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
UICollectionView *collectionView=[[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, cell.frame.size.width, cell.frame.size.height)];
collectionView.dataSource=self;
collectionView.delegate=self;
if (indexPath.row==0) {
[collectionView registerNib:[UINib nibWithNibName:@"QuotesCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:@"quotes"];
} else if (indexPath.row==1){
[collectionView registerNib:[UINib nibWithNibName:@"AlphabeticalWiseCategoriresCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:@"alphabets"];
} else if (indexPath.row==2){
[collectionView registerNib:[UINib nibWithNibName:@"DaysCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:@"days"];
}else if(indexPath.row==3){
[collectionView registerNib:[UINib nibWithNibName:@"LifeAspectsCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:@"life"];
}
[collectionView reloadData];
return cell;
}
我的问题/问题是我怎么能知道我在下面的代表中必须处理哪个集合视图nib,因为在这里我必须指定我在使用集合视图注册nib时使用的相同重用标识符?
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
}
我的第二个问题是如何检测哪个tableview行的集合视图单元被点击,因为我有不同的集合视图?
答案 0 :(得分:0)
您可以将每次创建的collectionView
保留在array
中。因此collectionView
中每个array
的索引将等于indexPath.row
。通过检索collectionView
中- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
参数的索引,您可以知道您正在处理哪个collectionView
,以及UICollectionViewCell
。
答案 1 :(得分:0)
首先,为什么不使用静态表视图?如果你对每个细胞进行硬编码,我认为这将是一个很好的增强。 接下来关于您的问题,iOS提供了每个UIView标记属性。 如果将表重新制作为静态表,则可以通过InterfaceBuilder设置标记属性。如果不是:
UICollectionView *collectionView=[[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, cell.frame.size.width, cell.frame.size.height)];
collectionView.dataSource=self;
collectionView.delegate=self;
collectionView.tag = indexPath.row;
然后:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
switch collectionView.tag {
case 0:
...
break
case 1:
...
break
}
}
您可以使用此方法解决第二个问题