Xcode 主从应用程序 UIWebView 未加载内容

Xcode Master Detail Application UIWebView not loading content

我在 RootViewController(master) 上有一个 Master Detail 应用程序,我正在使用 tableview 显示链接,当用户单击其中一个单元格时,它应该使用适当的网页填充 detailview。

在 RootViewController 中,这里是我在 DidSelectRow 上使用的代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"did select row");
    NSArray* reversedArray = [[objectData reverseObjectEnumerator] allObjects];
    NSDictionary *snapshot = [[NSDictionary alloc] init];
    snapshot = [reversedArray objectAtIndex:indexPath.row];

    DetailViewController *myCont = [[DetailViewController alloc] init];
    NSString *url = snapshot[@"url"];
    [myCont loadPage:url];


}

这里的详细视图是我必须加载网页的方法

- (void)loadPage:(NSString*)urlString
{

    NSLog(@"THE URL: %@",urlString);
    NSURLRequest* request=[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];
    NSLog(@"REQUEST: %@",request);

    //self.myWebView.scalesPageToFit = YES;
    [myWebView loadRequest:request]; 

}

在我的 Storyboard 中,我将我的 UIWebView 连接到我的 DetailViewController,用于 webview delegate 和 webview outlet。

页面从不加载

您正在创建一个新的 DetailViewController,而不是使用故事板的 DetailViewController。 这一行是错误的: DetailViewController *myCont = [[DetailViewController alloc] init]

"In my Storyboard, I have my UIWebView connected to my DetailViewController for webview delegate and webview outlet."

但在您的代码中,您似乎是手动创建 Details View Controller,而不是从情节提要中创建。

DetailViewController *myCont = [[DetailViewController alloc] init];

您应该使用 UIStoryboardSegue 而不是 alloc+init。

尝试阅读这篇文章 - https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/UsingViewControllersinYourApplication/UsingViewControllersinYourApplication.html

您是否尝试过遵守 UIWebViewDelegate 协议?

UIWebViewDelegate 有这些回调可以帮助你调试:

  • webView:shouldStartLoadWithRequest:navigationType:
  • webViewDidStartLoad:
  • webViewDidFinishLoad:
  • webView:didFailLoadWithError:

您需要做的就是找到 segue 的标识符,并在尝试进入该控制器时将 URL 字符串传递给 DetailViewController,并在 DetailViewController 的 viewDidLoad() 中实际调用您的 loadPage 方法。

在 Apple 提供的主从模板中,您可以像这样传递数据

** 记下 [controller setDetailItem: object] 那是你应该传递 URL 的地方。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
   if ([[segue identifier] isEqualToString:@"showDetail"]) {
       NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
       NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
       DetailViewController *controller = (DetailViewController *)[[segue destinationViewController] topViewController];
       [controller setDetailItem:object];
       controller.navigationItem.leftBarButtonItem = self.splitViewController.displayModeButtonItem;
       controller.navigationItem.leftItemsSupplementBackButton = YES;
   }
}