在 UITableviewCell 中使用 UICollection 视图时未调用 UICollectionView 委托方法“didSelectItemAtIndexPath”

Posted

技术标签:

【中文标题】在 UITableviewCell 中使用 UICollection 视图时未调用 UICollectionView 委托方法“didSelectItemAtIndexPath”【英文标题】:UICollectionView delegate method "didSelectItemAtIndexPath" not called when UICollection view used in UITableviewCell 【发布时间】:2016-10-13 06:21:13 【问题描述】:

我在 UITableviewCell 中使用了 UICollectionView,一切正常,仍在加载集合视图并显示其单元格,但加载集合视图后,当点击集合视图单元格时,我无法获取集合视图的“didSelectItemAtIndexPath”委托方法。

我的表格视图具有静态单元格,我将集合视图放在该单元格中

还要在上面定义委托和数据源

这是我的代码,调用了数据源方法但未调用委托

#pragma mark - collectionView data source


- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section

    return 10;


// The cell that is returned must be retrieved from a call to -dequeueReusableCellWithReuseIdentifier:forIndexPath:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"collCell" forIndexPath:indexPath];
    UIImageView *imgDocCell = (UIImageView *)[cell viewWithTag:100];
    imgDocCell.image = self.imgFileToChart;
    cell.layer.borderWidth=1.0f;
    cell.layer.borderColor=commonThemeColor.CGColor;
    return cell;



#pragma mark - collectionView delegate

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath

    NSLog(@"%@",indexPath);

【问题讨论】:

collectionView data source 代码添加在哪里? 我认为它采用 tableview 委托方法。在 tableview 委托方法中放置断点并检查它 @Mr.Bista 在我的 tableview 控制器中 只需检查它,如果它采用 tabelview 委托方法,则禁用该单元格的用户交互,然后它为 collectionview 委托工作 @jecky:我会试试的,谢谢 【参考方案1】:

也移除collelioview的outlet和delegate和datasource,见OUTPUT HERE

你应该这样写你的代码

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

    return 1;   


- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath

    static NSString *MyIdentifier = @"cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    // Here tableviewcell inside one collection view create with tag 10
    UICollectionView *coll =(UICollectionView*)[cell viewWithTag:10];
    coll.delegate = self;
    coll.dataSource = self;

    return cell;

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section

    return 3;


// The cell that is returned must be retrieved from a call to -dequeueReusableCellWithReuseIdentifier:forIndexPath:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

    UICollectionViewCell *cell1 = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell2" forIndexPath:indexPath];
    // in collectionview storyboard one UIImageview with tag 20
    UIImageView *imgDocCell = (UIImageView *)[cell1 viewWithTag:20];
    imgDocCell.image =[UIImage imageNamed:@"add.jpeg"];

    return cell1;


#pragma mark - collectionView delegate

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath

    NSLog(@"%@",indexPath);

【讨论】:

谁给这篇文章投了反对票?请检查代码,如果不正确,请投票 当您编写UICollectionView *coll =(UICollectionView*)[cell viewWithTag:10]; 之类的内容时,您不能告诉用户复制粘贴您的代码。这是什么? @LucaD'Alberti See bro 很常见,程序员一定要明白,我这里得给自己的tag 我真的不认为这很常见。相反,我认为对于看到您的帖子的用户来说这是错误且容易出错的 @LucaD'Alberti 是的,它很常见,我给出了解决方案。给出 tableview 单元格中的任何内容的出口,如果你会得到错误或者不只是回复我

以上是关于在 UITableviewCell 中使用 UICollection 视图时未调用 UICollectionView 委托方法“didSelectItemAtIndexPath”的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionView 作为子视图不会更新约束

pyside-uic 在哪里?

如何使用cmake强制UIC在源目录中生成ui_mainwindow.h

pyside-uic/pyuic4:找不到命令

如何在不导入自定义小部件类包的情况下使用自定义小部件和 uic.loadUi?

如何使用 setupUi 或 uic 输出来创建没有父小部件的独立布局?