Xcode UICollectionView 如何通过 indexpath 禁用某些单元格

Posted

技术标签:

【中文标题】Xcode UICollectionView 如何通过 indexpath 禁用某些单元格【英文标题】:Xcode UICollectionView How To Disable Some Cells by indexpath 【发布时间】:2014-10-15 23:27:06 【问题描述】:

我一直在试图弄清楚如何通过 indexpath 或使用 collectionview 的 cellsforitemsatindexpath 方法禁用 collectionview 中的单元格。我在下面有以下代码,但这只会禁用循环中的最后一个单元格。当我在 Xcode 中运行代码时,我也有以下图像。到目前为止,仅在顶部的第一行禁用了水平的第三个单元格,但我想禁用或将值设置为从第一行水平的前 3 个单元格为零。从下面的图片链接中,第三个单元格中缺少的“9”表示该值设置为 nil。任何建议表示赞赏。

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

    CollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"myCollectionCell" forIndexPath:indexPath];

    if (cell != nil)
    
        // May not need this
        NSInteger cellIndex = [myObjectsArray objectAtIndex:indexPath.row];

        for (int i = 0; i < rangeNumOfCellsToDisable; i++)
        
            if (indexPath.row == i)
            
                // If true, code goes here


            
            else
            
                // If not true, code that sets stuff to nil goes here


            


        


    

    return cell;


屏幕截图 https://drive.google.com/folderview?id=0BzaP1abbReAhMTYtSEh3alFlaGs&usp=sharing

截图:https://drive.google.com/folderview?id=0BzaP1abbReAhVzhCeEY2eFZibFE&usp=sharing

【问题讨论】:

【参考方案1】:

您好,请尝试此解决方案。

我假设您希望禁用前三个单元格,或者您可以禁用任何单元格..

在.h文件中

-@property(nonatomic,retain)NSMutableArray *disableArray;

.m 文件

disableArray=[[NSMutableArray alloc]init];

[disableArray addObject:@"0"];
[disableArray addObject:@"1"];
[disableArray addObject:@"2"];

    - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
    
        CollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"myCollectionCell" forIndexPath:indexPath];

        if (cell != nil)
        
            // May not need this
            NSInteger cellIndex = [myObjectsArray objectAtIndex:indexPath.row];

            if([disableArray containsObject:[NSString stringwithformat:@"%d",indexPath.row]])
              
                //the row which you want to disable do whatever you want over here...Hope this helps.
              


        

        return cell;

    

【讨论】:

NSIndexSet 可能比NSMutableArray 更好 抱歉延迟回复。谢谢!这行得通。但现在我遇到了另一个问题。我不得不重新加载collectionview。我正在使用 [cell setHidden:true];禁用单元格并且它可以工作。但是,当单元格重新加载不同的数据时,受 if 语句 if([disableArray containsObject:[NSString stringwithformat:@"%d",indexPath.row]]) 影响的单元格会显示随机数。如果这些数字中的任何一个与按 1、2、3、... 顺序排列的单元格匹配,则这些单元格将被禁用。 如何确保我清除了 disableArray 中的所有变量?我尝试了[disableArray removeAllObjects],也使用了一个贯穿[disableArray count]并将所有元素设置为0的for循环,但我仍然得到随机数。请参阅原始帖子中的链接以获取屏幕截图。 你在哪里分配 disableArray..在刷新集合视图之前你只是让数组为零...... 我已经尝试在- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 内分配,以及在调用cellForItemAtIndexPath 之前更新进入数组的对象的函数。它仅在我第一次运行时才起作用。请查看我的第一篇文章,我添加了带有更多屏幕截图的第二个链接,谢谢。

以上是关于Xcode UICollectionView 如何通过 indexpath 禁用某些单元格的主要内容,如果未能解决你的问题,请参考以下文章

在 UICollectionView Xcode 中添加子视图 [关闭]

UICollectionView + iOS 7 / Xcode 5 = 断言失败

无法使用 xCode 向 UiCollectionView 添加标题部分

奇怪的位置uicollectionview标题部分xcode

Xcode 在 UiCollectionView 中仅重新加载一个单元格

如何在 UICollectionView 下隐藏刷新控件