使用UIWebView时首次加载图像

时间:2013-11-01 02:56:07

标签: ios objective-c uitableview uiwebview

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

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

当我尝试使用分割视图控制器时,我没有遇到这个问题。

我应该寻找什么想法?或者我需要做些什么,我一定不能这样做?

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

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

这表明在开始之前可能会加载一个虚拟UIWebView,但这似乎很糟糕。

我只收到一次webViewDidStartLoad:来电,只有一次来电webViewDidFinishLoad:而没有来电webView:didFailLoadWithError:

组装机: kludge工作。这是:

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

-(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.
   }
}

1 个答案:

答案 0 :(得分: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加载内容两次。我自己也没有测试过,如果没有看到你的实际表加载代码,很难说问题的根源是否在其他地方,但请告诉我这是否有效!