Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

YouTube videos inside UITableView iPhone App

I currently have a tableview with youtube videos embedded inside of the custom cells.

I did this because from my research it seemed like the only way to allow the videos to load without leaving my application.

The problem is this:

The thumbnails take a while to load.

As I scroll down the list of videos, it keeps having to load the thunbnails.

If I scroll back up...it tries to load the video thumbnails yet again.

Has anyone got any suggestions on either better ways of doing this, or ways of getting the table cells to keep the data and not replace it?

My code looks like this:

CustomVideoCell *cell = (CustomVideoCell *)[tableView dequeueReusableCellWithIdentifier:@"CustomVideoCell"];

if (cell == nil) {

UIViewController *temporaryController = [[UIViewController alloc] initWithNibName:@"CustomVideoCell" bundle:nil];

cell = (CustomVideoCell *)temporaryController.view;

[temporaryController release];


GDataEntryBase *entry = [[self.feed entries] objectAtIndex:indexPath.row];
NSString *title = [[entry title] stringValue];
NSString *videoID = [[(GDataEntryYouTubeVideo *)entry mediaGroup] videoID];


NSString *htmlString = 
[
 [NSString alloc] 
 initWithFormat:@"<html><head><meta name = \"viewport\" content = \"initial-scale = 2.0, user-scalable = no, width = 110\"/></head><body style=\"background:#000;margin-top:0px;margin-left:0px\"><div><object width=\"110\" height=\"90\"><param name=\"movie\" value=\"http://www.youtube.com/v/%@&f=gdata_videos&c=ytapi-my-clientID&d=nGF83uyVrg8eD4rfEkk22mDOl3qUImVMV6ramM\"></param><param name=\"wmode\" value=\"transparent\"></param><embed src=\"http://www.youtube.com/v/%@&f=gdata_videos&c=ytapi-my-clientID&d=nGF83uyVrg8eD4rfEkk22mDOl3qUImVMV6ramM\" type=\"application/x-shockwave-flash\" wmode=\"transparent\" width=\"110\" height=\"90\"></embed></object></div></body></html>", 
 videoID, videoID
 ];


[[[cell.web subviews] lastObject] setScrollEnabled:NO];
[cell.web loadHTMLString:htmlString baseURL:[NSURL URLWithString:@"http://www.website.com"]];

cell.title.text = title;

Cheers

like image 493
mattmate Avatar asked Oct 12 '22 14:10

mattmate


1 Answers

What I do in these cases is creating a function which fills a mutable array with the table cells I need.
Then in the method:

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

I return the cell in the array based on the index like this:

return [cellArray objectAtIndex:indexPath.row];

I have created very large mutable arrays this way and had no memory issues but I guess it depends on other things in your app.

like image 84
Zigglzworth Avatar answered Oct 28 '22 22:10

Zigglzworth