UICollectionView cellForIndexPath 返回错误值
Posted
技术标签:
【中文标题】UICollectionView cellForIndexPath 返回错误值【英文标题】:UICollectionView cellForIndexPath returning wrong value 【发布时间】:2016-06-16 11:44:41 【问题描述】:我在UICollectionVIew
中使用UIButton
并点击该按钮我想知道该cell
的索引,因此我使用以下代码
setFrpPriceButton.tag = indexPath.item;
但我得到的值不正确。
以下是我为UICollectionView
编写的代码
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
return frpTitleArray.count;
- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath;
setFrpPriceButton = [UIButton new];
setFrpPriceButton.backgroundColor = UIColorFromRGB(0x2196f3);
[setFrpPriceButton setTitle:@"SET PRICE" forState:UIControlStateNormal];
[setFrpPriceButton addTarget:self action:@selector(setFrpPriceClick) forControlEvents:UIControlEventTouchUpInside];
setFrpPriceButton.tag = selectedCellIndex;
[frpCollectionViewCell addSubview:setFrpPriceButton];
// [frpButtonLabel bringSubviewToFront:setFrpPriceButton];
setFrpPriceButton.titleLabel.font = [UIFont boldSystemFontOfSize:10];
setFrpPriceButton.clipsToBounds = YES;
[setFrpPriceButton mas_makeConstraints:^(MASConstraintMaker *make)
make.top.equalTo(frpButtonLabel);
make.width.equalTo(frpCollectionViewCell).dividedBy(3);
make.right.equalTo(frpCollectionViewCell);
make.height.equalTo(frpTitleLabel);
];
return frpCollectionViewCell;
- (NSInteger)numberOfSectionsInCollectionView: (UICollectionView *)displaySpecialityCollectionView
return 1;
- (CGSize)collectionView:(UICollectionView *)displaySpecialityCollectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
return CGSizeMake(self.view.frame.size.width, self.view.frame.size.height/2);
-(UIEdgeInsets)collectionView:(UICollectionView *)displaySpecialityCollectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
return UIEdgeInsetsMake(0,0,0,0);
- (void)collectionView:(UICollectionView *)displaySpecialityCollectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
【问题讨论】:
- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath;单元格没有分配。你在哪里分配“frpCollectionViewCell”? @ArunKumarP 是对的。frpCollectionViewCell
是什么?并且不要添加子视图,单元格被重复使用。
为什么您没有在 XIB 中创建单元格?好的,使用 setFrpPriceButton.tag = indexPath.row
它为我工作
YourTableViewCell * frpCollectionViewCell = [tableView dequeueReusableCellWithIdentifier:@"ReuseCellIdentifier" forIndexPath:indexPath];在你的 cellForItemAtIndexPath 中添加这一行。如果没有情节提要,请确保您已注册您的手机。 [YourTable registerClass:[YourTableViewCell class] forCellReuseIdentifier:@"ReuseCellIdentifier" ];
我已经初始化了按钮、单元格和集合视图。
【参考方案1】:
您应该编写自定义单元格。并且该按钮应位于自定义单元格中。并添加从cellForItemAtIndexPath
为按钮设置标签。
现在的问题是在重复使用的单元格中重复添加按钮,所以你不会得到正确的标签。
用于创建自定义单元格。 http://zeroheroblog.com/ios/how-to-create-simple-tableview-with-custom-cells
【讨论】:
以上是关于UICollectionView cellForIndexPath 返回错误值的主要内容,如果未能解决你的问题,请参考以下文章
如何滚动另一个 UICollectionView 下方的 UICollectionView?
UICollectionView 单元内部已加载,但 UICollectionView 未显示
UICollectionView 断言失败 -[UICollectionView _updateWithItems:tentativelyForReordering:]
UITableviewCell 中的 UICollectionView。添加约束后,UICollectionView 不显示