изменить содержимое UIWebView из другого контроллера - PullRequest
0 голосов
/ 31 марта 2011

У меня есть TableViewController, который должен загружать ViewController с WebView, когда я выбираю ячейку.

Вот код:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    PostViewController *postViewController = [[PostViewController alloc] initWithNibName:@"PostViewController" bundle:[NSBundle mainBundle]];
    [postViewController.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.fr"]]]
    [self.navigationController pushViewController:postViewController animated:YES];

    [PostViewController release];

}

Проблема в том, что ViewController загружен, но в WebView ничего не происходит. Когда я отлаживаю программу, я вижу, что адрес WebView равен 0x0, поэтому я предполагаю, что что-то не так. Это потому, что я пытаюсь изменить содержимое WebView перед загрузкой его родительского ViewController?

Полагаю, еще один способ сделать это правильно - передать URL-адрес ViewController и затем вызвать loadRequest для WebView из метода viewWillAppear. Но мне нужно понять, почему это так не работает.

Ответы [ 2 ]

4 голосов
/ 31 марта 2011

Попробуйте это

Вместо доступа к WebView, почему бы вам просто не передать значение URL в ViewController и загрузить Webview в viewDidLoad postViewController.

В вашем случае

PostViewController *postViewController = [[PostViewController alloc] initWithNibName:@"PostViewController" bundle:[NSBundle mainBundle]];
postViewController.urlString = @"http://www.google.fr";
[self.navigationController pushViewController:postViewController animated:YES];

[PostViewController release];

В вашем postViewController.h объявите строку urlString со свойствами и синтезируйте ее в файле .m

Теперь в вашем представлении DidLoad

//Alloc init your webview here
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]]];
2 голосов
/ 31 марта 2011

0x0 - это адрес nil, что означает, что ваше веб-представление не было инициализировано на данный момент.

Если вы создаете веб-представление с помощью методов loadView или viewDidLoad, равных PostViewController, то вызов setNeedsLayout сразу после инициализации приведет к его созданию:

PostViewController *postViewController = [[PostViewController alloc] init ...
[postViewController.view setNeedsLayout];

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

...