从另一个Controller更改UIWebView的内容

时间:2011-03-31 15:56:33

标签: iphone cocoa-touch uikit uiwebview

我有一个TableViewController,当我选择一个单元格时,它应该加载一个带有WebView的ViewController。

以下是代码:

- (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所以我猜错了。 是因为我尝试在加载其父ViewController之前修改WebView的内容吗?

我想另一种正确的做法是将URL传递给ViewController,然后从viewWillAppear方法内部调用WebView上的loadRequest。 但我需要理解为什么它不能这样工作。

2 个答案:

答案 0 :(得分:4)

试试这个

为什么不将URL值传递给ViewController并在postViewController的viewDidLoad中加载Webview,而不是访问WebView。

在你的情况下

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文件中进行合成

现在在你的viewDidLoad

//Alloc init your webview here
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]]];

答案 1 :(得分:2)

0x0nil的地址,这意味着此时您的网络视图尚未初始化。

如果您使用loadView的{​​{1}}或viewDidLoad方法创建网络视图,则在初始化后立即调用PostViewController会强制创建:

setNeedsLayout

否则,在显示视图之前,不会调用这些方法。