如何在collectionview中加载不同的collectionivew单元?

时间:2015-10-24 09:03:22

标签: ios uitableview uicollectionview

我有一个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行的集合视图单元被点击,因为我有不同的集合视图?

2 个答案:

答案 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
  }
}

您可以使用此方法解决第二个问题