Добавить UIImageView в табличное представление - PullRequest
0 голосов
/ 07 сентября 2011

У меня есть асинхронный загрузчик изображений, который загружает изображения (JImage) в UIImageview.Я хочу отобразить их в табличной ячейке.Очевидно, я не могу установить cell.imageView.image, потому что у меня нет изображения, у меня просто есть представление.

Как мне установить UIImageview для tablecell?cell.backgroundView работает, хотя и закрашивает всю ячейку.

Код JImage:

    NSURL *theUrl=[NSURL URLWithString:imageURL];
JImage *photoImage=[[JImage alloc] init];
[photoImage initWithImageAtURL:theUrl];
[photoImage setContentMode:UIViewContentModeRedraw];
[photoImage setFrame:CGRectMake(0.0f, 0.0f, 40.0f, 65.0f)];
cell.backgroundView = photoImage;
[photoImage release];

, который в JImage.m:

- (void)connectionDidFinishLoading:(NSURLConnection*)theConnection 
{
     [self setImage:[UIImage imageWithData: data]]; 
}

Ответы [ 3 ]

1 голос
/ 07 сентября 2011

используйте этот код и установите кадр в соответствии с вашими потребностями.

UIImage *imagearrow = [UIImage imageNamed:@"arrow.png"];    
UIImageView *imgarrow=[[UIImageView alloc] initWithFrame:CGRectMake(290, 25, 7, 15)];
imgarrow.image =imagearrow;
[cell addSubview:imgarrow];
[imagearrow release];
1 голос
/ 07 сентября 2011

Вам не нужно использовать JImage, если все, что вы хотите сделать, это загрузить изображение асинхронно. Один простой способ сделать это с помощью GCD и блоков, например: https://github.com/ChrisTec/iPhone-Book-CodeSamples/blob/master/Chapter%2013/RealEstateViewer%2013.2.5/RealEstateViewer/ImageTableViewController.m

Вот пример главы книги Objective-C Основы, которую я в соавторстве, которая объясняет этот код подробно: http://www.manning.com/fairbairn/OCF_sample_ch13.pdf

Подводя итог: Когда запрашивается ячейка, вы смотрите, если вы уже загрузили изображение. Если у вас есть, вы отображаете это. Если нет, вы отображаете счетчик и запускаете асинхронный блок GCD, который будет извлекать изображение. Когда этот блок завершен, он запускает другой блок в главном потоке, который выключает спиннер для изображения. Вот и все.

0 голосов
/ 07 сентября 2011

Я думаю, вы должны принять другой подход к этому. Вместо того, чтобы помещать ваш JImage в ячейку, удерживайте его где-то еще в контроллере представления, обычно удобно использовать NSArray. Затем заполните ячейки изображениями-заполнителями или просто оставьте их пустыми.

Допустим, у вас есть массив со всеми загружаемыми JImages. Когда JImage в позиции x массива завершает загрузку, вы перезагружаете эту конкретную ячейку следующим образом:

NSIndexPath indexPath = [NSIndexPath indexPathForRow:x inSection:0];
[self.tableView reloadRowsAtIndexPaths:x withRowAnimation:NO];

А в вашем cellForRow:AtIndexPath вам просто нужно взять изображение из объекта JImage, содержащегося в массиве.

Надеюсь, это поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...