-1

私は、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");
  }

今、私は何がうまくいかないのか真剣に考えていません。すべてがログでうまく機能しているにもかかわらず、ウェブページのコンテンツはまだ表示されていません。

4

1 に答える 1

1

これ...

   detailViewController = [[DetailViewController alloc]init];

...DetailViewController表示した最初のコードセグメントで既に作成してディスプレイの一部にしたものを使用する代わりに、新しいものを作成します。したがって、画面上にないコントローラー/ビューの Web ビューをロードしています。

于 2012-10-15T14:52:12.980 に答える