I am working on a app that reads RSS feeds and picks out the specific media. After that the user will be directed to a web view that plays the selected media. I already have the web view built and I can access the URL. I can also open the file in Safari, but I need ti to open within the app. What I have so far is listed below.
I need help pushing the media to the web view. Thank you for your help!
if (indexPath.section == SectionHeader && indexPath.row == SectionHeaderEnclosure) {
if (item.enclosures) {
for (NSDictionary *dict in item.enclosures){
NSString *url = [dict objectForKey:@"url"];
NSLog(@" url is : %@",url);
//EXPERIMENTAL
[teachings loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];
self.title = item.title;
//[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
}
}
}
EDIT: The .m is below
#import "DetailTableViewController.h"
#import "NSString+HTML.h"
typedef enum { SectionHeader, SectionDetail } Sections;
typedef enum { SectionHeaderTitle, SectionHeaderDate, SectionHeaderURL, SectionHeaderEnclosure } HeaderRows;
typedef enum { SectionDetailSummary } DetailRows;
@implementation DetailTableViewController
@synthesize item, dateString, summaryString, teachings;
#pragma mark -
#pragma mark Initialization
- (id)initWithStyle:(UITableViewStyle)style {
if ((self = [super initWithStyle:style])) {
}
return self;
}
#pragma mark -
#pragma mark View lifecycle
- (void)viewDidLoad {
// Super
[super viewDidLoad];
// Date
if (item.date) {
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterMediumStyle];
[formatter setTimeStyle:NSDateFormatterMediumStyle];
self.dateString = [formatter stringFromDate:item.date];
[formatter release];
}
// Summary
if (item.summary) {
self.summaryString = [item.summary stringByConvertingHTMLToPlainText];
} else {
self.summaryString = @"[No Summary]";
}
}
#pragma mark -
#pragma mark Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections.
return 2;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
switch (section) {
case 0: return 4;
default: return 1;
}
}
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// Get cell
static NSString *CellIdentifier = @"CellA";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
// Display
cell.textLabel.textColor = [UIColor blackColor];
cell.textLabel.font = [UIFont systemFontOfSize:15];
if (item) {
// Item Info
NSString *itemTitle = item.title ? [item.title stringByConvertingHTMLToPlainText] : @"[No Title]";
// Display
switch (indexPath.section) {
case SectionHeader: {
// Header
switch (indexPath.row) {
case SectionHeaderTitle:
cell.textLabel.font = [UIFont boldSystemFontOfSize:15];
cell.textLabel.text = itemTitle;
break;
case SectionHeaderDate:
cell.textLabel.text = dateString ? dateString : @"[No Date]";
break;
case SectionHeaderURL:
cell.textLabel.text = item.link ? item.link : @"[No Link]";
cell.textLabel.textColor = [UIColor blueColor];
cell.selectionStyle = UITableViewCellSelectionStyleBlue;
break;
case SectionHeaderEnclosure:
cell.textLabel.text = item.link ? item.link : @"[No Link]";
cell.textLabel.textColor = [UIColor blueColor];
cell.selectionStyle = UITableViewCellSelectionStyleBlue;
break;
}
break;
}
case SectionDetail: {
// Summary
cell.textLabel.text = summaryString;
cell.textLabel.numberOfLines = 0; // Multiline
break;
}
}
}
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == SectionHeader) {
// Regular
return 34;
} else {
// Get height of summary
NSString *summary = @"[No Summary]";
if (summaryString) summary = summaryString;
CGSize s = [summary sizeWithFont:[UIFont systemFontOfSize:15]
constrainedToSize:CGSizeMake(self.view.bounds.size.width - 40, MAXFLOAT) // - 40 For cell padding
lineBreakMode:UILineBreakModeWordWrap];
return s.height + 16; // Add padding
}
}
#pragma mark -
#pragma mark Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// Open URL
if (indexPath.section == SectionHeader && indexPath.row == SectionHeaderURL) {
if (item.link) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:item.link]];
}
}
if (indexPath.section == SectionHeader && indexPath.row == SectionHeaderEnclosure) {
if (item.enclosures) {
for (NSDictionary *dict in item.enclosures){
NSString *url = [dict objectForKey:@"url"];
NSLog(@" url is : %@",url);
//EXPERIMENTAL
UIWebView *urlView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
[self.view addSubView:urlView];
[urlView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];
//[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
}
}
}
// Deselect
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
}
#pragma mark -
#pragma mark Memory management
- (void)dealloc {
[dateString release];
[summaryString release];
[item release];
[teachings release];
[super dealloc];
}
@end
Launch it from UIWebView , not in Safari. Here is an example implementation:
/* WebViewController that is responsible for displaying webview (shown modally) */
@interface WebViewController:UIViewController
{
NSString *_url;
UIWebView *webView;
}
@end
@implementation WebViewController
{
-(void) backClicked
{
[self dismissModalViewControllerAnimated:YES];
}
-(id) initWithURL:(NSString*)url
{
if(self = [super init])
{
_url = url;
}
return self;
}
- (void)loadView
{
self.view = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,480)];
webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 400)];
UIButton *backButton = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
[backButton addTarget:self action:@selector(backClicked) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubView:webView];
[self.view addSubView:but];
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:_url]]];
}
}
@end
In your code (import WebViewController to your source file).
....
NSLog(@" url is : %@",url);
//EXPERIMENTAL
WebViewController *webVC = [WebViewController alloc] initWithURL:url];
[self presentModalViewController:webVC animated:YES];
....
Note:i implemented only the required methods.
let me know if this helps.