【问题标题】:change the content of a UIWebView from another Controller从另一个控制器更改 UIWebView 的内容
【发布时间】:2011-03-31 15:56:32
【问题描述】:

我有一个 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。 但我需要了解为什么它不能以这种方式工作。

【问题讨论】:

  • 您的网络视图在哪里初始化?
  • 恐怕根本没有初始化。但在这种情况下似乎没有必要,因为我尝试了 BuildSucceeded 的解决方案,它无需初始化即可工作。 WebView 被声明为我的 PostViewController 的出口,它链接到 PostViewController.xib 中的 WebView 控件。

标签: iphone cocoa-touch uikit uiwebview


【解决方案1】:

试试这个

为什么不直接将 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]]];

【讨论】:

  • 是的,这就是我在帖子的最后一段中所说的(作为替代解决方案),并且效果很好。但是我还需要了解为什么它不能以另一种方式工作(但我猜 jnic 回答了问题的那一部分)。无论如何,感谢您的宝贵时间。
【解决方案2】:

0x0nil的地址,表示此时你的web view还没有初始化。

如果您在PostViewControllerloadViewviewDidLoad 方法中创建Web 视图,则在初始化后立即调用setNeedsLayout 将强制创建它:

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

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

【讨论】:

  • WebView 显示后就无法交互了?
  • 一旦显示出来,您就可以像往常一样与之交互。由于您没有详细说明您的设置,我创建了一个测试项目,假设 Web 视图在 loadView 中初始化,并确认它的行为符合预期。
  • 我确实在 Peter Hosey 的帖子下(根据您的问题)向您提供了更多信息。我会试试你的解决方案,这次不会忘记初始化它:) 谢谢你的时间。
猜你喜欢
  • 2016-07-18
  • 1970-01-01
  • 2021-03-03
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多