私は、SplitViewController と同様の GUI を必要とする 1 つの小さなプロジェクトに取り組んできました。今私がやったことは、ViewController のサブビューとして追加された MasterViewController と DetailViewController という 2 つの UIViewControllers があることです。ViewController.m のコードを以下に示します。
- (void)viewDidLoad
{
UIScreen *screen = [UIScreen mainScreen];
CGRect fullScreenRect = screen.bounds; // always implicitly in Portrait orientation.
width = fullScreenRect.size.width;
height = fullScreenRect.size.height;
detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
masterViewController = [[[MasterViewController alloc]initWithNibName:@"MasterViewController" bundle:nil] autorelease];
masterViewController.view.frame = CGRectMake(0, 0, 299, height);
detailViewController.view.frame = CGRectMake(300, 0, width-300, height);
[self.view addSubview:masterViewController.view];
[self.view addSubview:detailViewController.view];
}
今、MasterViewController didLoad メソッドで、サブビュー MasterTableViewController として追加しました...
MasterTableViewController クラスは次のようになります...
@interface MasterTableViewController : UITableViewController
{
DetailViewController *detailViewController;
}
UITableViewControllerに関連するすべての機能はすでに作成されています...そして、ユーザーからURLを追加してMasterTableViewに保存する機能も追加しました。次の関数では、必要な文字列を使用して DetailViewController の loadWebView 関数を呼び出そうとしています。呼び出しは関数に対して完全に行われます。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *urlString = [_objects objectAtIndex:indexPath.row];
detailViewController = [[DetailViewController alloc]init];
[detailViewController loadWebView:urlString];
}
DetailViewController の loadWebView メソッドには、次の実装があります。
-(void) loadWebView: (NSString *) urlToLoad
{
self.webView = [[[UIWebView alloc]
initWithFrame:CGRectMake(0, 45, self.view.frame.size.width, self.view.frame.size.height)] autorelease];
[self.webView setDelegate:self];
NSLog(@"SELF->WEBVIEW: %@",self.webView);
NSURL *url = [NSURL URLWithString:urlToLoad];
NSLog(@"loading url %@ %@", urlToLoad, self.webView);
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:requestObj];
}
Webviewが機能していることを確認するためだけに、次の関数も実装しました..
- (void)webViewDidStartLoad:(UIWebView *)webView
{
NSLog(@"webViewDidStartLoad");
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSLog(@"webViewDidFinishLoad");
}
プログラムを実行すると、ログにこれらすべてが出力されます...
2012-10-15 20:04:21.621 SyneBlogApp[2320:c07] device width height 768.000000 1024.000000
2012-10-15 20:04:21.630 SyneBlogApp[2320:c07] calling viewDidLoad for detailView
2012-10-15 20:04:21.636 SyneBlogApp[2320:c07] /Users/Library/Application Support/iPhone Simulator/5.1/Applications/B846EDA4-49CF-4DD3-AAB3-FF8BC19C65DA/Documents/Data.plist:
2012-10-15 20:04:22.942 SyneBlogApp[2320:c07] calling viewDidLoad for detailView
2012-10-15 20:04:22.954 SyneBlogApp[2320:c07] SELF>WEBVIEW: <UIWebView: 0x6a94510; frame = (0 45; 768 1004); layer = <CALayer: 0x6a94930>>
2012-10-15 20:04:22.955 SyneBlogApp[2320:c07] loading url http://wordpress.com <UIWebView: 0x6a94510; frame = (0 45; 768 1004); layer = <CALayer: 0x6a94930>>
2012-10-15 20:04:22.994 SyneBlogApp[2320:c07] webViewDidStartLoad
2012-10-15 20:04:26.828 SyneBlogApp[2320:c07] webViewDidFinishLoad
ログによると、WebView はデータを完全にロードしますが、エミュレーターを見ると白い画面が表示されます。つまり、コンテンツが表示されません...
webviewに問題がないことを確認するために、DetailViewController viewDiDloadMethodで次のことを試しましたが、これは機能し、Googleページを表示します...
- (void)viewDidLoad
{
self.webView = [[[UIWebView alloc]
initWithFrame:CGRectMake(0, 45, self.view.frame.size.width, self.view.frame.size.height)] autorelease];
NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:requestObj];
[self.view addSubview:self.webView];
[super viewDidLoad];
NSLog(@"calling viewDidLoad for detailView");
}
今、私は何がうまくいかないのか真剣に考えていません。すべてがログでうまく機能しているにもかかわらず、ウェブページのコンテンツはまだ表示されていません。