0

我最初的计划是使用拆分视图控制器在 iPad 应用程序旁边有一个表格视图和一个通用视图。然后我意识到我不能将拆分视图控制器用作子控制器。所以,我一直在尝试使用表格视图控制器,到目前为止我已经得到了很好的结果。本质上,我使用 tableview 的标题视图作为我将根据选择的行使用的各种视图的容器。唯一未解决的问题是网站的图像在第一次呈现时不会显示在 UIWebView 中。如果我点击另一个显示 Web 视图的表格行,它会显示得很好。如果我再次点击原来的那个,它也显示得很好。

我先点击哪个并不重要。它总是第一个不显示图像的。它不显示图像,而是显示图像文件的名称。

当我用拆分视图控制器尝试类似的事情时,我没有遇到这个问题。

任何想法我应该寻找什么?或者有什么我需要做而我不能做的事情?

如果重要的话,正在加载的页面只是远程服务器上的缩略图页面,由 Irfanview 的 HTML 缩略图页面生成器创建。

PS 经过进一步测试,这确实是第一个演示文稿,只是没有按预期工作。首先,我的意思是每个应用程序会话的第一个。显示UIWebview为表头的子视图。表格视图控制器显示为来自另一个控制器的按钮的弹出框,当用户点击图像时显示该按钮。即使我关闭所有这些控制器层等,如果我再次实例化它们,也会UIWebView正确显示。

这表明可能在开始之前加载一个假人UIWebView,但这似乎很笨拙。

我接到一个电话,webViewDidStartLoad:一个电话,一个电话webViewDidFinishLoad:,没有电话webView:didFailLoadWithError:

KLUDGE:kludge 有效。这里是:

在我的表视图控制器中,我创建了一个布尔属性URLHasBeenRequested并将其设置为NOviewDidLoad。然后我要求重新加载:

-(void)webViewDidFinishLoad:(UIWebView *)webView
{
   if (!self.URLHasBeenRequested) {
      //On first pass, try a second request.
      [webView loadRequest:webView.request];
      self.URLHasBeenRequested = YES;//Set this flag so a duplicate request happens only the first time.
   }
}
4

1 回答 1

0

我怀疑这与 UITableView 加载标头并尝试在该过程中分配内存的方式有关,而不是与 UIWebView 本身有关。无论出于何种原因,UIWebView 的加载似乎被中断,而 UITableView 的渲染仍在完成(只是猜测)。

您可能会尝试的一件事是继续通过添加 UIWebView 子视图来设置表头,但不要立即调用“loadRequest”。例如,您可以等到表格的其余可见单元格加载完毕,然后最后加载标题视图。您可以检测到何时发生这种情况:

-(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if([indexPath row] == ((NSIndexPath*)[[tableView indexPathsForVisibleRows] lastObject]).row){
        [webView loadRequest:webView.request];
    }
}

诚然,这也是一个有点笨拙的解决方法,但至少你没有让 UIWebView 两次加载内容。我自己也没有对此进行过测试,并且没有看到您的实际表加载代码,很难说问题的根源是否在其他地方,但让我知道这是否有效!

于 2013-11-01T14:14:31.890 回答