是否可以在iOS中获取UICollectionView中的所有项目?

时间:2017-08-09 01:38:54

标签: ios objective-c

我想获取 UICollectionView 中的所有项目。

我编写了下面的代码,但它没有按照我想要的方式工作。我的CollectionView中有6个项目,但它只显示了4个项目。我应该如何修改我的母鹿?

   for(NSIndexPath *indexPath in self.viewCollection.indexPathsForVisibleItems) {
    //    for(imgCount in self.viewCollection.numberOfSections) {
    //        NSIndexPath *indexPath = self.viewCollection.indexPathsForVisibleItems;
            // Get selected cell
            MYCell* cell = (MYCell*) [_viewCollection cellForItemAtIndexPath:indexPath];
            if(cell.checked == YES) {
                imgCount = imgCount + 1;

                NSString *imgName = [directoryContent objectAtIndex:indexPath.item];
                NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
                NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@", imgName]];
                NSData *imgFile = [NSData dataWithContentsOfFile:filePath];

                if(imgCount == 1) {
                    [IMGDATA_grid appendString:[imgFile base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength]];
                }
                else {
                    [IMGDATA_grid appendString:@","];
                    mTempData = [imgFile base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];
                    [IMGDATA_grid appendString:mTempData];
                }
            }
     }

2 个答案:

答案 0 :(得分:0)

CollectionViews(和TableViews等)的工作方式是,您从代码中的结构传递数据,很可能是NSArray或NSMutableArray。这是您保存数据的地方。

将数据放入数组=>让你的CollectionView访问数据=>显示用户界面

如果您需要访问代码中其他位置的数据,请直接参考数据结构,而不是UI元素本身,特别是因为系统可以删除单元格以节省内存。

所以说你想知道第47行的UICollectionViewCell的标题是什么,你不需要去Cell 47并询问它的标题,而是直接引用你的数据结构,如:

Array
(
    [0] => 17
    [1] => 16
)

答案 1 :(得分:0)

您好我认为这是关于您的集合视图算法。我的意思是在使用 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath方法时,您应该保留您在单元格,数组或模型中使用的数据或类似的东西。可以显示的4个项目是在viewDidLoad之后绘制的项目,没有任何滚动操作。如果在集合视图中使用具有相同偏移量的3个单元格,则可以毫无问题地获取所有项目。关于我的意思的微小代码

NSArray *array = [NSArray arrayWithObjects:@"String1",@"String2",@"String3","String4",@"String5",@"String6",nil];

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

if (cell == nil)
{
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCollectionViewCell" owner:self options:nil];
    cell = [nib objectAtIndex:0];
}

[cell setupCellWithString:[array objectAtIndex:indexPath.row]];

return cell;}

选择集合视图中的任何项目

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {

NSString *strInArray = [array objectAtIndex:indexPath.row];}

我希望我能正确理解你的问题。祝好运。顺便说一下,collectionview.indexPathsForVisibleItems表示在集合视图上绘制和显示的项目。