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。
您是否尝试过遵守 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;
}
}
我在 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。
您是否尝试过遵守 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;
}
}