在 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”的主要内容,如果未能解决你的问题,请参考以下文章
如何使用cmake强制UIC在源目录中生成ui_mainwindow.h