如何以编程方式在 uicollectionview 中插入图像?

Posted

技术标签:

【中文标题】如何以编程方式在 uicollectionview 中插入图像?【英文标题】:How to insert images in uicollectionview programmatically? 【发布时间】:2014-02-17 06:55:55 【问题描述】:

我对 Objective-C 很陌生,所以希望这一切都有意义..我运行了第一个答案中提供的代码 Creating a UICollectionView programmatically..它工作正常。现在我想在单元格中添加一些图片,可以扩展鼠标点击。我搜索了很多教程,但都使用 nib 文件或故事板文件。我如何以编程方式完成此任务?

任何帮助将不胜感激。提前致谢。

【问题讨论】:

了解基础知识raywenderlich.com/22324/… 作为初学者,您应该按照网络上的完整教程而不是 SO,然后来这里查询。 【参考方案1】:

正如洛根所说:

#define IMG_TAG 1000
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    static NSString *CellIdentifier = @"MyCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    // Configure the cell...
    cell.textLabel.text = @"test.....";
    UIImage * img = [UIImage imageNamed: @"sampleImage"];

    UIImageView * customImageView = (UIImageView*) [cell viewWithTag: IMG_TAG];
    // two cases:
    // 1) we got a "recycled" cell, so we already have an image view added
    // 2) we got a "new" cell, so we must create, add image view AND TAg
    // in both cases we will set image

    if (customImageView)
        // case 1
        // nothing special
    else
        // case 2:
        // add and tag:
        customImageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 2, 30, 30)];
        [cell addSubview: customImageView];
        customImageView.tag = IMG_TAG;
    

    customImageView.image = img;
    return cell;

请查看并点赞:)

【讨论】:

【参考方案2】:

初学者阅读教程并首先了解以下链接和苹果文档中的所有内容

ios-programming-uicollectionview-tutorial-with-sample-code

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UICollectionView_class/Reference/Reference.html

像这种方法一样改变你的背景颜色

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

    UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];
    UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100];
    recipeImageView.image = [UIImage imageNamed:[recipeImages objectAtIndex:indexPath.row]];
    cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"photo-frame.png"]];
    [self.view addSubview:recipeImageView];
    cell.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:[recipeImages objectAtIndex:indexPath.row]]];

    return cell;

输出:

【讨论】:

你的项目有什么问题 是的,我已经通过放置图像并声明类似的数组来放置你的函数,就像在教程中一样......但它没有在单元格中显示图像......我认为它们是连接所需的某些命令带有文件所有者的 imageviewer 和 collection-cell ...就像我们在情节提要中手动执行的操作一样... 如果可能的话链接你的项目 你可以从这个链接下载项目:skydrive.live.com/… 因为您正在调用[cell viewWithTag:100],所以我假设您的视图已作为子视图添加到单元格中。这是不正确的。不应该直接将子视图添加到单元格,而是添加到单元格的 contentView。即[cell.contentView addSubview:imageView]; & [cell.contentView viewWithTag:100];【参考方案3】:

注意:

上面的代码是错误的!

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

    UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];
    UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100];
    recipeImageView.image = [UIImage imageNamed:[recipeImages objectAtIndex:indexPath.row]];
    cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"photo-frame.png"]];
    [self.view addSubview:recipeImageView];
    cell.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:[recipeImages objectAtIndex:indexPath.row]]];

    return cell;

您分配(最好分配一次无名标签...)但每次调用 cellForItemAtIndexPath 时代码都会添加子视图。

【讨论】:

我认为最好显示正确的答案而不是重述错误的代码。我想他们想要didSelectCellAtIndex

以上是关于如何以编程方式在 uicollectionview 中插入图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式在 uicollectionview 中插入图像?

如何以编程方式快速创建 uicollectionview(没有情节提要)

如何根据 UICollectionView 的部分以编程方式更新标签

以编程方式创建 UICollectionView

如何以编程方式推送 UICollectionView? [复制]

我如何以编程方式将 uicollectionview 放在扩展的 uitableviewcell 中