来自另一个视图控制器的UI在WebWebView中加载网页

时间:2013-09-20 14:38:13

标签: iphone ios objective-c uitableview uiwebview

我有一个标签式应用程序,其中包含一个包含UIWebView的选项卡和一个包含Table View Controller的第二个选项卡。

我正在尝试这样做,以便当我点击表格中的一行时,它会将我带到我的其他标签并加载网页。

这是我的故事板: My Storyboard

这是我对网络视图的实现:

-(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; 在我的.h文件中,用于UIWebView选项卡。

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

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

在Table View Controller中,我现在正在这样做。

- (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];

}

仍无济于事。

1 个答案:

答案 0 :(得分:1)

可能无法加载,因为当您致电loadAViewer:时,视图本身尚未加载,因此sfnViewer插座不会连接到故事板中的UIWebView

您可以通过检查sfnViewer中的loadAViewer:是否为零来确认。

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

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