Xcode Master Detail Application UIWebView无法加载内容

时间:2015-03-10 13:59:06

标签: ios xcode uiwebview uisplitviewcontroller

我有一个Master Detail应用程序,在RootViewController(master)上我使用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]; 

}

在我的故事板中,我将UIWebView连接到我的DetailViewController,用于webview委托和webview插座。

页面永不加载

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

  

"在我的故事板中,我将UIWebView连接到我的   用于webview委托和webview outlet的DetailViewController。"

但是在您的代码中,您似乎手动创建了详细信息视图控制器,而不是从故事板创建。

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

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

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

答案 2 :(得分:0)

您是否尝试过符合UIWebViewDelegate协议?

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

  • web视图:shouldStartLoadWithRequest:navigationType:
  • webViewDidStartLoad:
  • webViewDidFinishLoad:
  • web视图:didFailLoadWithError:

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

在Master-Detail模板中,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;
   }
}