Ios 首次使用UIWebView时未加载的图像

Ios 首次使用UIWebView时未加载的图像,ios,objective-c,uitableview,uiwebview,Ios,Objective C,Uitableview,Uiwebview,我最初的计划是为iPad应用程序使用一个拆分视图控制器,在其旁边有一个表视图和一个通用视图。然后我意识到我不能使用分割视图控制器作为子控制器。所以,我一直在尝试使用一个表视图控制器,到目前为止,我已经得到了相当好的结果。本质上,我使用tableview的header视图作为各种视图的容器,我将根据选择的行使用这些视图。唯一未解决的问题是,网站的图像在第一次显示时不会显示在UIWebView中。如果我点击另一个显示web视图的表行,它将显示良好。如果我再次点击原始图像,它也会显示良好 我先点击哪一

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

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

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

你知道我应该找什么吗?还是有什么我必须要做而不能做的事情

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

另外,经过进一步的测试,这确实是第一次演示,但没有达到预期效果。我所说的第一次是指每个应用程序会话的第一次。
UIWebview
作为表头的子视图显示。tableview控制器显示为另一个控制器按钮的popover,该按钮在用户点击图像时显示。即使我关闭了所有这些控制器层等,如果我再次实例化它们,
UIWebView
也会正确显示

这意味着可能在开始之前加载一个虚拟的
UIWebView
,但这似乎很困难

我只收到了一个对
webviewdidstartoad:
的调用,还有一个对
webviewdidfishload:
的调用,而没有对
webView:didfailloadwitheror:
的调用

乱七八糟: 这套乱七八糟的办法奏效了。这是:

在我的表视图控制器中,我创建了一个布尔属性
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.
   }
}

我怀疑这更多地与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]; } } -(void)tableView:(UITableView*)tableView将显示单元格:(UITableViewCell*)用于rowatindexpath的单元格:(NSIndexPath*)indexPath { if([indexPath行]==((NSIndexPath*)[[tableView indexPathsForVisibleRows]lastObject])。行){ [webView加载请求:webView.request]; } }
诚然,这也是一个有点笨拙的解决方法,但至少您没有让UIWebView加载两次内容。我自己也没有测试过,在没有看到实际的表加载代码的情况下,很难说问题的根源是否在其他地方,但请告诉我这是否有效

你那里可能有东西。例如,我知道它使用private
uigobblergesturererecognizer
,这显然是为了吸引手势。因此,如果有其他类似的事情正在影响我的网络视图,我也不会感到惊讶。不管怎样,等我有时间我会试试你的建议。哦,等一下。我只是想到了一件事。这是行不通的,除非我遗漏了一些关于表视图的内容。触发web视图的是点击其中一个表视图单元格,因此表已经加载。它不会因为有人窃听了手机就重新加载,是吗?我认为你必须明确要求重新加载。我可能真正应该做的是使用容器控制器,而不是尝试使用表头,但由于它通常都能工作,我想我现在就不使用它了。