2011-09-05 16 views
5

UITableView Cell'imde youtube video küçük resimlerini aşağıdaki kod aracılığıyla gömüyorum. Ancak, tabloyu her kaydırdığımda, hücre ekranı terk edip geri döndüğünde video küçük resimleri yeniden yüklenir.UITableViewCell'e Yerleşik YouTube Videoları: Yeniden yüklemeyi önlemek için önbellek nasıl alınır?

Küçük resimleri önbelleğe almanın en etkili yolu, yalnızca ilk kez yüklenmeleri için hangileridir? Postadölesan durumlarda

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

    SearchResult *searchResult = [self.searchResultArray objectAtIndex:indexPath.row]; 

    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:PlaceholderCellIdentifier]; 
    if (cell == nil) 
    { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:PlaceholderCellIdentifier]autorelease]; 
     UIWebView *videoView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 0, 104, 104)]; 
     videoView.tag = 1; 
     cell.imageView.image = [UIImage imageNamed:@"Placeholder"]; 

     [cell.contentView addSubview:videoView]; 
     [videoView release]; 
    } 

    UIWebView *thisVideoView = (UIWebView *)[cell.contentView viewWithTag:1]; 
    NSString *videoHTML = [self embedYouTube:searchResult.url frame:CGRectMake(0, 0, 104, 104)]; 
    [thisVideoView loadHTMLString:videoHTML baseURL:nil]; 

    return cell; 
} 


- (NSString*)embedYouTube:(NSString*)url frame:(CGRect)frame { 
    NSString* embedHTML = @"\ 
    <html><head>\ 
    <style type=\"text/css\">\ 
    body {\ 
    background-color: transparent;\ 
    color: white;\ 
    }\ 
    </style>\ 
    </head><body style=\"margin:0\">\ 
    <embed id=\"yt\" src=\"%@\" type=\"application/x-shockwave-flash\" \ 
    width=\"%0.0f\" height=\"%0.0f\"></embed>\ 
    </body></html>"; 
    NSString* html = [NSString stringWithFormat:embedHTML, url, frame.size.width, frame.size.height]; 
    return html; 
} 
+0

Sorunuzun yanıtını veya herhangi bir geçici çözümü buldunuz mu? – Alix

cevap

0

yapabilirsiniz objc_setAssociatedObject ile searchResultArray içinde nesne ile Web Görünümü ilişkilendirmek (ilk webView tahsis sonra).

noktasıdır, cellFoRowAtIndexPath her zaman hücre orada web görüntülemesini başlatmak gerektiğini, görünür hale gelir, ancak bunları başlatmak zaman yaptığın denir tarihi:

objc_setAssociatedObject([searchResultArray valueForKey:someIndex], &someKey, webView, OBJC_ASSOCIATION_RETAIN_NONATOMIC) 

ardından cellForRowAtIndexPath içinde yapmanız : Eğer hazır olduğunda

if (objc_getAssociatedObject([searchResultArray valueForKey:indexPath.row, &someKey) != nil) { 
    UIWebView *thisVideoView = (UIWebView *)[cell.contentView viewWithTag:1]; 
    *thisVideoView = objc_getAssociatedObject([searchResultArray valueForKey:indexPath.row, &someKey); 
} else { 
    ////empty webView or some loading indicator 
} 

sen WebViews başlatabilir. & someKey, statik bir karakterdir ve sınıfa global olmalıdır.

İlgili konular