我有一个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插座。
页面永不加载
答案 0 :(得分:0)
您正在创建一个新的DetailViewController,而不是采用故事板的DetailViewController。 这条线错了: DetailViewController * myCont = [[DetailViewController alloc] init]
答案 1 :(得分:0)
"在我的故事板中,我将UIWebView连接到我的 用于webview委托和webview outlet的DetailViewController。"
但是在您的代码中,您似乎手动创建了详细信息视图控制器,而不是从故事板创建。
DetailViewController *myCont = [[DetailViewController alloc] init];
您应该使用UIStoryboardSegue
而不是alloc + init。
答案 2 :(得分:0)
您是否尝试过符合UIWebViewDelegate协议?
UIWebViewDelegate有这些回调可以帮助你调试:
您需要做的就是找到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;
}
}