UICollectionView显示空单元格

时间:2013-05-11 16:56:11

标签: ios objective-c cocoa-touch uiimage uicollectionview

我有一个显示图像数组的UICollectionView。单元格中的图像显示为白色框而不是真实图像。

我从另一个视图中复制并粘贴了这个代码,它在另一个视图中运行得很好......但是在另一个视图中它以某种方式显示所有图像,如白框。

显示的框等于应显示的图像数。所以信息正确传递。

图像显示为小白盒子,但是当我点击它们时,它们会将所选图像显示到我放置在其他位置的另一个UIImage元素中(参见图像1,清晰度左侧的绿色方块)按钮的变化取决于哪个白色单元格触摸)。

有人能发现为什么Cell中的UIImage无法正常显示?

也许值得一提的是我在同一视图中也有一个tableview

// in viewDidLoad method
[self.myCollection registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"Cells"];

//
- (void)getAllIcons
{        
    NSArray* imgArrayRaw = [[NSBundle mainBundle] pathsForResourcesOfType:@"png" inDirectory:nil];

    NSMutableArray* imgArray = [[NSMutableArray alloc] init];
    for (NSString* imgArrayProccesing in imgArrayRaw) {
        NSString* ho = [imgArrayProccesing lastPathComponent];
        if([ho rangeOfString:@"btn-"].location != NSNotFound){
            [imgArray addObject:ho];
        }
    }
    _imgFiles = [ NSMutableArray arrayWithObjects:imgArray,nil];
    _imgFiles = _imgFiles[0];


    _myCollection.hidden = NO;
    [_myCollection reloadData];
}

// Collection View
#pragma mark - UICollectionView Datasource

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{   
    return [_imgFiles count];
}

- (NSInteger)numberOfSectionsInCollectionView: (UICollectionView *)collectionView
{
    return 1;
}

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

    UIImageView *imageView = (UIImageView *)[cell viewWithTag:101]; 
    imageView.image = [UIImage imageNamed:[_imgFiles objectAtIndex:indexPath.row]]; 
    cell.backgroundColor = [UIColor whiteColor];

    return cell;
}

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    [self changeIconImage:[_imgFiles objectAtIndex:indexPath.row]]; 
}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{   
    return CGSizeMake(50, 50);  
}

- (UIEdgeInsets)collectionView:
(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{   
    return UIEdgeInsetsMake(50, 20, 50, 20);
}

IMAGE1: image 1 enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

对不起,您还没有提供足够的信息来完全诊断问题。我怀疑你的代码有以下几种可能性;

a)在您的项目中找不到指定的图像,因此返回了nil;

b)找不到带有标签101的imageView,因此返回nil;

c)找到了imageView,但未启用或被隐藏。

我会在" cell.backgroundColor"设置一个断点。并检查每个返回值并检查imageView的状态,以查看它是否已启用且未隐藏。