检测在UITableViewCell内的UICollectionView上点击

时间:2016-08-30 09:40:44

标签: ios objective-c uitableview uicollectionview

我正在使用UICollectionView内的UITableViewCell。我已完成添加内容,并且能够在UICollectionView内看到UITableViewCell

但现在我不知道如何检查在cell的哪一行内点击UICollectionView UITableView {。}}。

所以,如果有人知道如何认识它,请帮助。

提前致谢。

#pragma mark
#pragma mark - UITableViewDelegate and UITableViewDatasource
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return 15;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    CellForCollectionView *cell = [tableView dequeueReusableCellWithIdentifier:@"CellForCollectionView"];

    if (cell == nil) {
        cell = [[CellForCollectionView alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CellForCollectionView"];
    }

    cell.categoryCollectionView.delegate = self;
    cell.categoryCollectionView.dataSource = self;

    [cell.categoryCollectionView registerNib:[UINib nibWithNibName:@"CollectionCellForCategory" bundle:nil] forCellWithReuseIdentifier:@"CollectionCellForCategory"];
    cell.lblCategoryName.text = [NSString stringWithFormat:@" Category %d",indexPath.row];

    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    return cell;
}






#pragma mark
#pragma mark - UIcollectionViewDelegate and UIcollectionViewDatasource
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
    return 1;
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    return 15;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    CollectionCellForCategory *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CollectionCellForCategory" forIndexPath:indexPath];
    cell.imagCategory.layer.borderColor = [[UIColor blackColor]CGColor];
    cell.imagCategory.layer.borderWidth = 1.0f;
    return cell;
}


-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
    NSLog(@"%ld",(long)indexPath.row);
    NSLog(@"%ld",(long)indexPath.section);
}

3 个答案:

答案 0 :(得分:0)

  1. 您可以继承UICollectionView并添加一个变量来跟踪tableViewCell的indexPath
  2. 在tableViewCell中,将collectionView类型更改为自定义collectionView
  3. 在UITableViewDatasource的“cellForRowAtIndexPath”方法中设置变量
  4. 自定义collectionView:

    @interface IndexedCollectionView : UICollectionView
    @property (nonatomic, strong) NSIndexPath* parentIndexpath;
    @end
    

    您的自定义tableViewCell(大约)

    @interface CellForCollectionView : UITableViewCell
    @property (nonatomic, weak) IBOutlet IndexedCollectionView* categoryCollectionView;
    @end
    

    UITableViewDataSource方法实现:

    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
        CellForCollectionView *cell = [tableView dequeueReusableCellWithIdentifier:@"CellForCollectionView"];
    
        if (cell == nil) {
            cell = [[CellForCollectionView alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CellForCollectionView"];
        }
    
        cell.categoryCollectionView.delegate = self;
        cell.categoryCollectionView.dataSource = self;
    
        [cell.categoryCollectionView registerNib:[UINib nibWithNibName:@"CollectionCellForCategory" bundle:nil] forCellWithReuseIdentifier:@"CollectionCellForCategory"];
         cell.lblCategoryName.text = [NSString stringWithFormat:@" Category %d",indexPath.row];
    
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        cell.categoryCollectionView.parentIndexpath = indexPath;
        return cell;
    }
    

答案 1 :(得分:0)

有点偏离主题,但万一有人遇到与我自己有相同问题的集合视图单元格触及tableview工作并找到了这个问题寻找答案:

可以使用所有默认设置。因此,请确保您的视图控制器中没有其他触摸手势(例如像我这样的点击手势)阻止触摸到达集合视图单元格。

如果您有这样的手势识别器,并且想要保留它,则需要将其“cancelTouchesInView”属性设置为false。就这样。您不需要实现IUGestureRecognizerDelegate函数来使其工作(尽管如果您有多个手势识别器而不仅仅是一个,则可能会有所不同。)

答案 2 :(得分:-1)

这很简单。在“UITableView:”方法中为cellForRowAtIndexPath的每个单元格添加标记,即

cell.tag = indexPath.row

同样适用于UICollectionView

中的CollectionViewCell

假设你有一个包含2行的tableView,它分别有2个collectionViews。

UITableView的row1将标记为0,而其他标记为1

现在用户点击了UITableViewCell里面的collectionView里面的collectionViewCell

现在,如果你点击第一个UITableViewCell里面的collectionView的第一个collectionViewCell

您将获取单元格标记为0并且您已经知道self.tag,即tableViewCell是0

现在,如果你点击第二个UITableViewCell里面的collectionView的第一个collectionViewCell

您将获取单元格标记为0并且您已经知道self.tag,即tableViewCell是1

我认为这就是你所需要的。请告诉我你是否清楚......谢谢:)