gpt4 book ai didi

iphone - 通用 iOS 应用程序 : UIWebView in detailViewController does not display content for iPad part

转载 作者:行者123 更新时间:2023-11-28 23:12:17 26 4
gpt4 key购买 nike

我正在开发一个Xcode 4 上的通用 iOS 应用程序。这是我第一次尝试创建 iPhone/iPad 应用程序。我正在使用主从应用程序模板。这个应用程序大致是一个 RSS 订阅阅读器。我已经按照本教程了解了大意:http://cocoadevblog.com/iphone-tutorial-creating-a-rss-feed-reader

我成功地让 iPhone 部分工作,但我在 iPad 部分的 UIWebView 有问题。

这是可能不正确的代码。

从 MasterViewController ... :

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
if (!self.detailViewController) {
NSDictionary *theItem = [items objectAtIndex:indexPath.row];
DetailViewController *nextController = [[DetailViewController alloc] initWithNibName:@"DetailViewController_iPhone" bundle:nil];
[nextController setDetailItem:theItem];
[self.navigationController pushViewController:nextController animated:YES];
}

}
else {
if (!self.detailViewController){
NSDictionary *theItem = [items objectAtIndex:indexPath.row];
DetailViewController *nextController = [[DetailViewController alloc] initWithNibName:@"DetailViewController_iPad" bundle:nil];
[nextController setDetailItem:theItem];
self.detailViewController = nextController;
}
else {
[self.detailViewController setDetailItem:[self.items objectAtIndex:indexPath.row]];
}
}

...对于 DetailViewController,这里是 setDetailItem: 和 configureView 的实现:

- (void)setDetailItem:(id)newDetailItem
{
if (_detailItem != newDetailItem) {
_detailItem = newDetailItem;
// Update the view.
[self configureView];
}
if (self.masterPopoverController != nil) {
[self.masterPopoverController dismissPopoverAnimated:YES];
}
}

- (void)configureView
{
// Update the user interface for the detail item.
if (_detailItem) {
NSLog(@"webpage creation");
NSString *html = [_detailItem objectForKey:@"title"];

[...html stuff added to html string...]

webView = nil;
webView.delegate=self;
//[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]]];
[self.webView loadHTMLString:html baseURL:nil];

NSLog(@"webView loaded");
}
}

当我在 MasterView(MasterView/detailView -> 在通用应用程序案例中,iPad 应用程序是一个 splitview 风格的应用程序)上选择一行时,我在 detailView Pane 上出现了一个空白屏幕。

我在 InterfaceBuilder 中链接了 webView(对于 iPhone/iPad .xib 文件),我收到了每个 NSLog,但我无法让 UIWebViewDelegate 回答我,即使我实现了它。当然,加载 Google 主页的评论也不起作用。

25/10/11 更新:

我创建了一个新的通用应用程序,一个简单的应用程序,我在其中添加了一个 UIWebView 并尝试加载 Google 网页。我可以从 viewDidLoad/viewDidAppear (detailViewController) 加载页面,但不能从我选择一行时调用的 configureView (detailViewController) 加载页面(在 detailViewController 中触发 setDetailItem)。就像我在加载面板后无法修改它一样。有些东西我不明白。(我用来启动网页的代码与上面configureView中的注释是同一行代码)

2011 年 10 月 26 日更新

webView 在 configureView 中没有值(null)(当我尝试为选定的行显示它时)。我试过这个,它不起作用但我(显然/至少)在这种情况下得到了 webView 的值:

- (void)configureView{
if (_detailItem) {

UIWebView *tempWebView = [[UIWebView alloc] init];
self.webView = tempWebView;

NSLog(@"webpage creation");
NSString *html = [_detailItem objectForKey:@"title"];

[...html stuff added to html string...]

//[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]]];
[self.webView loadHTMLString:html baseURL:nil];


self.webView.delegate=self;//better to add "self" to get it working
NSLog(@"webView loaded");
NSLog(@"%@",self.webView); //i got this : <UIWebView: 0x6a5a550; frame = (0 0; 0 0); layer = <CALayer: 0x6a59750>>
}}

通过写“self.webView.delegate=self;”我得到了代表的答复。然而,这个会产生两个答案(??),就像有两个 webView 正在运行一样?:

2011-10-26 10:49:57.089 APPName[18334:f803] didStart Loading web Page

2011-10-26 10:49:59.416 APPName[18334:f803] didStart Loading web Page

2011-10-26 10:49:59.523 APPName[18334:f803] finished loading web page

2011-10-26 10:49:59.806 APPName[18334:f803] finished loading web page

最佳答案

我终于让它工作了。

但是,我找到的唯一解决方案是使用 STORYBOARD 而不是 xib 文件创建另一个项目,我猜这就是问题所在。

所以我真的不知道我的问题的答案,但我想这肯定是 xib 文件中的链接问题。但是我没找到。

使用 Storyboard,我很容易地制作了 iPad 版本,但不是 iPhone 版本...直到我找到了很好的教程:http://www.youtube.com/watch?v=NHIOx_1mz-Q

所以对于 Storyboard,我删除了 tableview 部分(默认插入)并放置以下代码:

主视图 Controller

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
NSLog(@"SELECT ROW IPHONE");
if (!self.detailViewController){
NSDictionary *theItem = [items objectAtIndex:indexPath.row];
DetailViewController *nextController = [self.storyboard instantiateViewControllerWithIdentifier:@"Detail"];
[nextController setDetailItem:theItem];
[self.navigationController pushViewController:nextController animated:YES];
}

}
else {
NSLog(@"SELECT ROW IPAD");
self.detailViewController.detailItem = [self.items objectAtIndex:indexPath.row];
}

细节 View Controller

- (void)configureView{
// Update the user interface for the detail item.
if (self.detailItem) {
self.detailDescriptionLabel.text = [self.detailItem description];
self.webView.delegate=self;
NSString *html = @"";
[...html stuff...]
[self.webView loadHTMLString:html baseURL:nil];
}

我没有提到它,但我当然也创建并链接了 webview。

如果有人找到一个简单项目的 xib 版本的答案,其中 TableView 链接到 iPad 的 detailView(在 Universal iOS 项目上),我想听听。

关于iphone - 通用 iOS 应用程序 : UIWebView in detailViewController does not display content for iPad part,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7873946/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com