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