Перемещение в WebView из значения NSDictionary - PullRequest
0 голосов
/ 10 июня 2011

Я работаю над приложением, которое читает RSS-каналы и выбирает определенные носители.После этого пользователь будет перенаправлен на веб-просмотр, который воспроизводит выбранные медиа.У меня уже есть веб-представление, и я могу получить доступ к URL.Я также могу открыть файл в Safari, но мне нужно открыть его в приложении.То, что у меня есть, перечислено ниже.

Мне нужна помощь, чтобы вывести медиа в веб-просмотр.Спасибо за вашу помощь!

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]];
        }  
    }  
}

РЕДАКТИРОВАТЬ: .m ниже

#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

1 Ответ

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

Запустите его из UIWebView, а не в Safari.Вот пример реализации:

/* 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   

В вашем коде (импортируйте WebViewController в ваш исходный файл).

....
NSLog(@" url is : %@",url);  
//EXPERIMENTAL

WebViewController *webVC = [WebViewController alloc] initWithURL:url];
[self presentModalViewController:webVC animated:YES];
....

Примечание: я реализовал только необходимые методы.
позвольте мнезнаю, поможет ли это.

...