0

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

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

这是我的故事板: 我的故事板

这是我对 web 视图的实现:

-(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 (strong, nonatomic) 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];

}

仍然无济于事。

4

1 回答 1

1

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

sfnViewer您可以通过检查 if is nil in来确认这一点loadAViewer:

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

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

于 2013-09-20T15:08:02.600 回答