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 不显示

将标题添加到 UICollectionView,而不是 UICollectionView 的部分

嵌套垂直 UICollectionView 和动态高度