0

iCarousel(カバーフロースクロールスタイルを提供するライブラリ)を使用したいXIBでビューを作成しました。そのビューにはUIImageViewがあり、すべてのIBが設定されたそのビューのコントローラーがあります(FileOwnerの「ビュー」が私のビューに設定されており、UIImageviewのアウトレットがあります)

プログラムでコントローラーを作成します

SBTViewController* iv1 = [[SBTViewController alloc] initWithNibName:@"SBTViewController_iPhone" bundle:nil];
SBTViewController* iv2 = [[SBTViewController alloc] initWithNibName:@"SBTViewController_iPhone" bundle:nil];

その後

UIImage* im1 = [UIImage imageNamed:@"1.png"];
iv1.imView.image = im1;


UIImage* im2 = [UIImage imageNamed:@"2.png"];
iv2.imView.image = im2;

現在、iv1コントローラーのビューを追加して表示したり、階層の一部にしたりしていないことに注意してください。代わりに、ポインタを保存し、しばらくしてから(カルーセルが移動したとき)、iv1.viewをカルーセルに渡して表示します。

ビューは表示されますが、画像は表示されません...

検索した後、スタックオーバーフローに関する質問を見つけました。ビュー階層に追加される前に画像をimageviewに設定することは実際には機能しない、つまり、ViewDidLoadの後にプログラムでのみ画像を設定できるということです。しかし、私の場合、各インスタンスを異なる値で初期化したいので、ViewDidLoadにコードを追加することは十分に堅牢ではありません...

編集:私はちょうどこのようにコントローラーのビューパラメーターにアクセスすることを知りました

iv1.view.tag

ビューが読み込まれます

だから私はそれをどのようにすべきですか?他の人の下に隠しますか?ぶさいくな

ありがとう

4

1 に答える 1

0

問題は、UIImageを作成するときに、UIImageViewがまだ作成されていないことです。したがって、2つの解決策:viewDidLoadの後にUIImageを作成します。ただし、それが望ましくない場合は、XIBからUIImageViewを削除し、クラスのinitメソッドで自分で作成してから、viewDidLoadのビュー階層に追加することができます。

于 2012-10-11T09:27:01.227 に答える