UIWebView не загружается - PullRequest
0 голосов
/ 28 марта 2012

Я знаю, что это такая простая проблема, но я боролся с ней, и она просто не будет работать.Я пытаюсь получить UITableView, чтобы открыть URL-адрес, когда выбранная строка.Используя NSLog, я вижу, что переменная urlSelected настроена правильно и правильно передается в UrlViewController, но она просто не отображает веб-представление.Это только отображение меню навигации с черным экраном.Если я добавлю push-отношение между двумя контроллерами представления, то ViewController загружается правильно, но у него возникают проблемы при передаче переменной urlSelected в UrlViewController.Как правильно передать эту переменную, или мне нужно установить разные отношения между двумя ViewControllers?Вот что у меня сейчас:

RootViewController.m:

    #import "RootViewController.h"
    #import "UrlViewController.h"
    ..........
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath         *)indexPath
    {

        UrlViewController *webController = [[UrlViewController alloc] init];


        if(indexPath.row == 0){
            webController.urlAddress = @"http://www.yahoo.com";
            NSLog(@"urlAddress being passed is:%@", webController.urlAddress);
            [self.navigationController pushViewController:webController animated:YES];

        }else if(indexPath.row == 1){
            webController.urlAddress = @"http://www.google.com";
            NSLog(@"urlAddress being passed is:%@", webController.urlAddress);
            [self.navigationController pushViewController:webController animated:YES];


        }else{
            webController.urlAddress = @"http://www.abc.com";
            NSLog(@"urlAddress being passed is:%@", webController.urlAddress);
            [self.navigationController pushViewController:webController animated:YES];

        }    

    }

UrlViewController.h:

      @interface UrlViewController : UIViewController{
          NSString *urlAddress;
      }
      @property (strong) IBOutlet UIWebView *webView;
      @property (nonatomic, retain) NSString *urlAddress;

UrlViewController.m:

      @implementation UrlViewController
      @synthesize webView;
      @synthesize urlAddress;
      ...........
     - (void)viewWillAppear:(BOOL)animated {
        NSURL *url = [NSURL URLWithString:urlAddress];
        NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
        [self.webView loadRequest:requestObj];
        NSLog(@"The value being receieved is:%@", urlAddress);
    }

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
    }

Я получаю следующий вывод из NSLogs:

    2012-03-28 09:53:30.266 BeloitTurner[4278:f803] urlAddress being passed is:http://www.yahoo.com
    2012-03-28 09:53:30.269 BeloitTurner[4278:f803] The value being receieved is:http://www.yahoo.com

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 29 марта 2012

Похоже, вы используете раскадровку, которая содержит представления как для RootViewController, так и для UrlViewController. Если это так, вам нужно создать экземпляр UrlViewController, используя раскадровку:

UrlViewController* webController = [self.storyboard instantiateViewControllerWithIdentifier:@"UrlViewController"];

Используйте это вместо того, чтобы распределять initController в вашем tableView: didSelectRowAtIndexPath: метод. Кроме того, в раскадровке, содержащей представления для обоих этих контроллеров представления, установите поле Идентификатор в разделе «Контроллер представления» инспектора атрибутов в Интерфейсном Разработчике в качестве строки UrlViewController. Причина, по которой это делается вместо того, чтобы просто использовать init, заключается в том, что файл, описывающий представление для UrlViewController, находится внутри раскадровки, поэтому выделение, инициирующее UrlViewController, означает, что он не найдет связанный с ним вид и просто покажет черный экран. 1004 *

Вы также можете сделать это с помощью отношений Push. Вместо tableView: didSelectRowAtIndexPath: метод, вы просто установили бы отношение Push (переход) от ячейки в RootViewController к UrlViewController. В файле RootViewController.m добавьте следующий метод:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"PassUrlToUrlViewControllerSegue"]) {
        segue.destinationViewController.urlAddress = @"http://www.yahoo.com";
    }
}

Это потребует от вас установки идентификатора для передачи push. Выберите стрелку, представляющую ход push, в раскадровке и установите для ее идентификатора строку PassUrlToUrlViewControllerSegue.

Вы можете сделать это динамическим, используя параметр sender, данный вам в prepareForSegue: sender: чтобы определить, какая ячейка была выбрана и, следовательно, какая ссылка для передачи.

...