2011-10-23 4 views
0

UIImageViewを使用するUIViewControllerがあり、その画像ビューは画像データ(NSData)で初期化されます。これはXIBを使用するが、プログラムのビューを作成しない。loadViewが呼び出される前にUIViewControllerが完全に設定されていることを確認する

- (void)loadView 
{ 
    UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageWithData:self.imageData]]; 
    scrollView = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
    scrollView.contentSize = imageView.bounds.size; 
    scrollView.delegate = self; 
    [scrollView addSubview:scrollView]; 
} 

データがどのallocの別のコントローラ、init Sによって設定する必要があり、ナビゲーションコントローラにこのビューコントローラをプッシュする:

ImageViewController *imageViewController = [ImageViewController alloc] init]; 
imageViewController.imageData = someData; 
[self.navigationController pushViewController:imageViewController animated:YES]; 

loadViewが呼び出される前に、この場合はデータを設定する必要があることをすべて知っていますか?または、私は知らない、カスタムイニシャライザを作成するか、または何らかの理由でloadViewビューコントローラがデータを受け取ったときに呼び出す必要がありますか?

私は、UITableViewControllerなどのような何が起こるのか混乱した多くの同様の状況に直面しています。

答えて

1

は、どのように私はloadViewメソッドの前に行われ、この場合には、データを設定され、実行する必要があるすべてのものが呼び出されたことを知っていますか?

ドキュメントでは、ビューコントローラがビューが必要になるまで読み込まないことを記述しているためです。また、ナビゲーションコントローラが画面上にプッシュしようとする前に、ビューコントローラのビューは必要ありません。

さらに、画像ビューにimageDataを割り当てる適切な場所はviewDidLoadです(「ビューの追加の初期化を実行する場合は、viewDidLoadメソッドで行います)。」)。 loadViewメソッドでは、現在のフォームでは表示されません。そのメソッドのビューコントローラのviewプロパティにビューを割り当てる必要があります。

+0

ありがとうございました、それは多くの混乱を解消しました。 –

1

ビューコントローラのビュープロパティにアクセスすると、loadViewが発生します。あなたが書いたコードは正常に動作します。なぜなら、最初にviewプロパティがアクセスされるのはpushViewControllerのどこかにあるからです。あなたがのNSLogでビューのプロパティにアクセスするため

ImageViewController *imageViewController = [ImageViewController alloc] init]; 
NSLog(@"size = (%.0f, %.0f)", imageViewController.view.frame.size.width, 
           imageViewController.view.frame.size.height); 
imageViewController.imageData = someData; 
[self.navigationController pushViewController:imageViewController animated:YES]; 

:あなたがこれを書いた場合

あなたは問題を抱えていると思います。これにより、imageDataが設定される前にloadViewが呼び出されます。

+0

もちろん、これはかなり意味があります。ありがとうございました! –

関連する問題