Youtube видео в ячейках таблицы - PullRequest
2 голосов
/ 11 марта 2011

В настоящее время у меня есть таблица с видео YouTube, встроенная в пользовательские ячейки.

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

Проблема в этом

Загрузка миниатюр занимает некоторое время. Когда я прокручиваю вниз список видео, он продолжает загружать миниатюры. Если я прокручиваю назад, он снова пытается загрузить миниатюры видео.

Кто-нибудь получил какие-либо предложения относительно более эффективных способов сделать это или способов заставить ячейки таблицы хранить данные, а не заменять их?

Мой код выглядит так:

-(UITableViewCell *)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{

static NSString *MyIdentifier = @"MyIdentifier";

YouTubeCell *cell = (YouTubeCell*)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if(cell ==nil){

    cell = [[[YouTubeCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease];

}
NSDictionary *dic = [youTubeArr objectAtIndex:indexPath.row];
[cell updateCellData:dic];
return cell;

}

-(void)updateCellData:(NSDictionary*)dict
{
NSDictionary *tempDic = [dict objectForKey:@"video"];
self.titleLbl.text = [tempDic objectForKey:@"title"];
NSString *viewCountStr = [NSString stringWithFormat:@"%@ views -",[tempDic objectForKey:@"viewCount"]];
viewCountLbl.text = viewCountStr;
uploadedDateLbl.text = [tempDic objectForKey:@"uploaded"];

NSDictionary *videoDic = [tempDic objectForKey:@"player"];
NSString *videoStr = [NSString stringWithFormat:@"%@",[videoDic objectForKey:@"default"]]; 

NSString *embedHTML = 
@"<html><head>\
<body style=\"margin:0\">\
<embed id=\"yt\" src=\"%@\" type=\"application/x-shockwave-flash\" \
width=\"%0.0f\" height=\"%0.0f\"></embed>\
</body></html>";

// videoView = [[UIWebView alloc] initWithFrame:CGRectMake(3, 5, 100, 60)]; initialzed in ///initwithstyle of cell

NSString *html = [NSString stringWithFormat:embedHTML, videoStr, videoView.frame.size.width, videoView.frame.size.height];
[videoView loadHTMLString:html baseURL:nil];

}

1 Ответ

1 голос
/ 06 июня 2011

Вам следует кэшировать загруженные изображения.

Один из подходов может заключаться в создании, например, изменяемого словаря, в котором вы храните свои изображения с ключами, уникальными для вашего UITableViewCellscellForRowAtIndexPath вы получаете соответствующее изображение, вызывая, например, [dictionary objectForKey:uniquecellidentifier].Если он возвращает nil, вы знаете, что изображение еще не было загружено, и вы должны создать запрос для этого.Как только загрузка закончится, вы сохраните изображение в словаре ([dictionary setObject:image forKey:uniquecellidentifier]

. Это должно дать вам более конкретную идею:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    NSString *cellid=[NSString stringWithFormat:@"Cell%i%i", indexPath.section, indexPath.row];
    if([dictionary objectForKey:cellid]){
        NSLog(@"Retrieving value for %@: %@", cellid, [dictionary objectForKey:cellid]);
        cell.textLabel.text=[dictionary objectForKey:cellid];
        //Show image from dictionary
    }else{
        NSLog(@"Now value set for %@.", cellid);
        [dictionary setObject:[NSString stringWithFormat:@"Testvalue%@", cellid] forKey:cellid]; //Save image in dictionary
        cell.textLabel.text=@"Loaded";
    }
    return cell;
}

Создать NSMutableDictionary с именем "словарь "в вашем заголовочном файле и инициализируйте его в viewDidLoad:

dictionary = [[NSMutableDictionary alloc] init];

Заголовочный файл:

NSMutableDictionary *dictionary;

Это приведет к следующему поведению: В первый раз ваша ячейкаотображается «Loaded». Во всех последующих отображениях будет отображаться его установленное значение.

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