无法从UICollectionViewCell实例访问Image

时间:2013-07-15 13:20:46

标签: ios uicollectionview uicollectionviewcell

我正在按照本教程对我的项目进行一些修改:http://www.appcoda.com/ios-programming-uicollectionview-tutorial/

我正在尝试获取IB为我创建的UIImageView实例。

以下是我的IB的截图:

enter image description here

我有一个名为FeedViewCell的自定义类,它包含一个UIImageView。这是cellForItemAtIndexPath代码:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *identifier = @"Cell";

    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];

    UIImageView *imageView = (UIImageView *)[cell viewWithTag:100];
    imageView.image = [UIImage imageNamed:[postPhotos objectAtIndex:indexPath.row]];

    return cell;
}

问题是UIImageView * imageView =(UIImageView *)[cell viewWithTag:100];回来是零。无论如何,使用viewWIthTag方法对我来说似乎很奇怪,但在调试器中我没有看到imageView是UICollectionViewCell的子视图的迹象。如果查看此调试屏幕,您可以看到该单元格似乎没有任何UIImageView子视图:

enter image description here

但是我看到2个UIImageViews作为CollectionView的子视图。

所以似乎我在IB做错了。这并不奇怪,因为我似乎总是在与IB斗争(至少看看代码我能看到发生了什么)。

感谢您的任何建议!

更新:我放弃使用IB挂钩ImageView并尝试在代码中创建它,如下所示: http://cl.ly/QFxs

图像无法正常显示。如果您查看屏幕截图(调试器),您会看到图像和imageViews都是有效的对象。

2 个答案:

答案 0 :(得分:1)

我不认为你需要在这种情况下使用标签。您可以在FeedViewCell中创建一个UIImageView属性,将其连接到界面构建器中,然后在

中访问它
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

例如

//在FeedViewCell中

    @interface FeedViewCell  : UICollectionViewCell

    @property (weak, nonatomic) IBOutlet UIImageView *imageView;

    @end

//在控制器中

    - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
        static NSString *identifier = @"Cell";

        FeedViewCell *cell = (FeedViewCell *) [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];

        cell.imageView.image = [UIImage imageNamed:[postPhotos objectAtIndex:indexPath.row]];
        return cell;
    }

打开故事板然后单击助手编辑器按钮,这将打开另一个窗口。在那里打开feedViewCell.h并按住Ctrl并单击imageView并将其拖动到.h文件,该文件将为您提供创建插座的菜单。您可以将其命名为imageView属性。那应该是它。 enter image description here

查看此链接以获取更多信息 http://klanguedoc.hubpages.com/hub/IOS-5-A-Beginners-Guide-to-Storyboard-Connection

答案 1 :(得分:1)

如果您致电self.collectionView registerClass...,则需要将其删除。故事板自动处理此注册。