Проблема с доступом к изображению из экземпляра UICollectionViewCell

Я следую этому руководству с некоторыми изменениями для своего проекта: http://www.appcoda.com/ios-programming-uicollectionview-tutorial/

Я пытаюсь получить экземпляр UIImageView, который создает для меня IB.

Вот скриншот моего ИБ:

введите здесь описание изображения

У меня есть собственный класс 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:

введите здесь описание изображения

Однако я вижу 2 UIImageViews как подвиды CollectionView.

Так что похоже, что я что-то не так делаю в IB. Это неудивительно, поскольку я всегда борюсь с IB (по крайней мере, глядя на код, я вижу, что происходит).

Спасибо за любые предложения!

обновление: я отказался от использования IB для подключения к ImageView и попытался создать его в коде, как показано ниже: http://cl.ly/QFxs

Изображения отображаются неправильно. Однако, если вы посмотрите на скриншот (отладчик), вы увидите, что изображения и изображения являются допустимыми объектами.


person phil swenson    schedule 15.07.2013    source источник


Ответы (2)


Я не думаю, что вам нужно использовать теги в этой ситуации. Вы можете создать свойство UIImageView в FeedViewCell, подключить его в построителе интерфейса, а затем получить к нему доступ в

- (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. Это должно быть так. введите здесь описание изображения

Перейдите по этой ссылке для получения дополнительной информации http://klanguedoc.hubpages.com/hub/IOS-5-A-Beginners-Guide-to-Storyboard-Connection

person Yan    schedule 15.07.2013

Если вы звоните self.collectionView registerClass..., то вам нужно его удалить. Раскадровки обрабатывают эту регистрацию автоматически.

person Daniel    schedule 28.01.2014