【问题标题】:iOS Load Web Page in UIWebView from Another View ControlleriOS 从另一个视图控制器加载 UIWebView 中的网页
【发布时间】:2013-09-25 23:59:58
【问题描述】:

我有一个选项卡式应用程序,其中一个选项卡包含一个 UIWebView,另一个选项卡包含一个表视图控制器。

我正在努力做到这一点,以便当我点击表格中的一行时,它会将我带到我的另一个选项卡并加载一个网页。

这是我的故事板:

这是我的网络视图实现:

-(void)loadAViewer:(NSURL*)viewerURL
{
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:viewerURL];
    [sfnViewer loadRequest:requestObj];
}

然后在表格视图控制器中:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    //Get the URL from plist
    ...

    //Generate url, pass it in and switch to web view tab
    viewerURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@/viewer?username=%@&pw=%@&%@", web, loc, user, pass, params]];

    ViewerFirstViewController *viewerWebView = [[ViewerFirstViewController alloc] init];
    [viewerWebView loadAViewer:viewerURL];

    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    [self.tabBarController setSelectedIndex:0];

}

目前没有任何反应。我被带到另一个选项卡,但 UIWebView 为空白 - 没有页面加载,但也没有崩溃。

//编辑 - 根据史蒂夫的回答进行的更改

基于此,我添加了 @property(强,非原子)NSURL viewerUrl; 在我的 UIWebView 选项卡的 .h 文件中。

我已在 .m 中合成它并将其添加到我的 viewDidLoad 方法中。

NSURLRequest *requestObj = [NSURLRequest requestWithURL:viewerURL];
[sfnViewer loadRequest:requestObj];

在表格视图控制器中,我现在正在这样做。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    //Get the URL from plist
    ...

    //Generate url, pass it in and switch to web view tab
    viewerURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@/viewer?username=%@&pw=%@&%@", web, loc, user, pass, params]];

    ViewerFirstViewController *viewerWebView = [[ViewerFirstViewController alloc] init];
    [viewerWebView setViewerUrl:viewerURL];

    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    [self.tabBarController setSelectedIndex:0];

}

还是没用。

【问题讨论】:

  • 这里的问题到底是什么?它不工作吗?您收到什么错误消息?
  • 它没有加载,它移动到另一个选项卡,但我看到的是一个空白的视图控制器。编辑问题以使其更清楚:)

标签: iphone ios objective-c uitableview uiwebview


【解决方案1】:

它可能没有加载,因为当您调用 loadAViewer: 时,视图本身尚未加载,因此 sfnViewer 插座不会连接到情节提要中的 UIWebView

您可以通过检查 sfnViewerloadAViewer: 中是否为 nil 来确认这一点。

如果是这种情况,您必须在 ViewerFirstViewController 上定义一个 NSURL 属性并将其分配给该属性,而不是调用 loadAViewer:。然后在viewWillAppear: 方法中,您应该将URL 加载到sfnViewer

但是,这将导致每次访问选项卡时重新加载 Web 视图,您可以通过检查 viewerURL 是否与 Web 视图中当前使用的 URL 不同来避免这种情况:[sfnViewer.request.URL isEqual:self.viewerURL],如果是同样的然后不要创建/加载请求。

【讨论】:

  • 根据您的回答编辑问题以显示我刚刚尝试过的内容
  • P.S. sfnViewer 为零
  • 你的意思是它在 viewDidLoad 中仍然是 nil 吗?
  • 在 viewDidLoad 中它不是 nil
  • 我通过在 didSelectRow 中设置 dirty 布尔值来解决此问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-17
  • 2020-02-01
  • 2015-12-02
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多