我有一个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。 但我需要理解为什么它不能这样工作。
答案 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)
0x0
是nil
的地址,这意味着此时您的网络视图尚未初始化。
如果您使用loadView
的{{1}}或viewDidLoad
方法创建网络视图,则在初始化后立即调用PostViewController
会强制创建:
setNeedsLayout
否则,在显示视图之前,不会调用这些方法。