Справка по UITableView Push to URL - PullRequest
       6

Справка по UITableView Push to URL

0 голосов
/ 08 августа 2011

Я пытаюсь перейти к новому представлению и отправить URL-адрес веб-представлению в этом представлении, но оно не получает запрос URL-адреса. storyLink объявлен ранее, но даже если я попытаюсь запросить http://www.google.com, он тоже не сработает, поэтому я знаю, что проблема в том, что он почему-то не принимает URL.

DetailViewController *newviewController=[[[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil]autorelease];
            NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:storyLink]];
            [newviewController.rssview loadRequest:request];
            [self.navigationController pushViewController:newviewController animated:YES];

1 Ответ

0 голосов
/ 08 августа 2011

Лучше объявить свойство в следующем представлении для NSURL и установить значение из родительского представления.

Например, установите следующий код в файле DetailViewController.h

    @interface DetailViewController : UIViewController
    {
            NSURL *request;
    }
    @property (nonatomic, assign) NSURL *request;

В вашем файле DetailViewController.m ... @synthesize request;

И измените свой текущий код, как показано ниже ...

    DetailViewController *newviewController=[[[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil]autorelease];
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:storyLink]];
    newviewController.request = request;
    //[newviewController.rssview loadRequest:request];
    [self.navigationController pushViewController:newviewController animated:YES];  

По вашему коду ...:

Ниже приведены некоторые недостающие вещи, которые вы должны изменить в своем коде, и он начнет работать нормально.

  1. Установить делегата для управления UIWebview.

    self.rssview.delegate = self;
    [self.rssview loadRequest:self.request]; 
    
  2. В вашем DetailViewController.h измените следующие строки.

    @interface DetailViewController : UIViewController <UIWebViewDelegate>
    {
        IBOutlet UIWebView *rssview;
        NSURLRequest *request;
    }
    @property(nonatomic, retain, readonly)UIWebView *rssview;
    @property (nonatomic, assign) NSURLRequest *request;
    @end
    
  3. В DetailViewController.m добавьте метод делегата UIWebview, как показано ниже ...

    - (BOOL)webView:(UIWebView *)myWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
    {
        return YES;
    }
    
  4. Заменить следующий код в

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    {
        int storyIndex = [indexPath indexAtPosition: [indexPath length] - 1];
        NSString * storyLink = [[stories objectAtIndex: storyIndex] objectForKey: @"link"]; 
        // clean up the link - get rid of spaces, returns, and tabs...
        storyLink = [storyLink stringByReplacingOccurrencesOfString:@" " withString:@""];
        storyLink = [storyLink stringByReplacingOccurrencesOfString:@"\n" withString:@""];
        storyLink = [storyLink stringByReplacingOccurrencesOfString:@" " withString:@""];
        storyLink = [storyLink stringByAddingPercentEscapesUsingEncoding: NSStringEncodingConversionAllowLossy];
        NSLog(@"link: %@", storyLink);
        if(indexPath.row==0)
        {       
            DetailViewController *newviewController=[[[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil]autorelease];
            NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:storyLink]];
            //[newviewController.rssview loadRequest:request];
            newviewController.request = request;
            [self.navigationController pushViewController:newviewController animated:YES];
        }
        else 
        {   
            DetailViewController *newviewController=[[[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil]autorelease];
            NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:storyLink]];
            //[newviewController.rssview loadRequest:request];
            newviewController.request = request;
            [self.navigationController pushViewController:newviewController animated:YES];
        }
    }
    
...