0

これの何が問題なのかわかりません。サブビューを現在のビューに追加しようとしています。IallocinitWithNibNamemySecondViewControllerで、そのmyImageViewパラメータをに設定しますUIImageView。問題は、サブビューが追加されたときにmyImageView設定されていないことです。

これはコードです:

- (void)viewDidLoad
{
   [super viewDidLoad];
SecondViewController *secondView = [[SecondViewController alloc]initWithNibName:@"SecondViewController" bundle:nil];

secondView.myImageView.image = [UIImage imageNamed:@"image1.png"];

[self.view addSubview secondView.view];
}

Interface Builder 経由で画像を設定するmyImageViewと正しく表示されますaddSubviewが、上記のようにプロパティを設定すると機能しません...UIImageViewアウトレットは IB に正しく接続されています。

これは次のSecondViewControllerとおりです。

@interface SecondViewController : UIViewController
{

}

@property(nonatomic,strong)IBOutlet UIImageView *myImageView;


@end
4

2 に答える 2

1

あなたの問題はsecondView.myImageView.image = [UIImage imageNamed:@"image1.png"];、myImageViewアウトレットを呼び出すときにまだ設定されていないことだと思います。のドキュメントにinitWithNibName:bundle:は、「指定したnibファイルはすぐにはロードされません。ViewControllerのビューに初めてアクセスしたときにロードされます」と記載されています。したがって、次のようなコードが必要です。

- (void)viewDidLoad
{
   [super viewDidLoad];
SecondViewController *secondView = [[SecondViewController alloc]initWithNibName:@"SecondViewController" bundle:nil];

// Force the nib to load, which subsequently sets the myImageView outlet
[secondView view];

secondView.myImageView.image = [UIImage imageNamed:@"image1.png"];

[self.view addSubview secondView.view];
}

ただし、このアプローチはお勧めしません。実際には、SecondViewControllerの-viewDidLoadメソッドでmyImageViewアウトレットの画像を設定する必要があります。それが属するところです。

// SecondViewController.m

- (void)viewDidLoad
{
     [super viewDidLoad];

     self.myImageView.image = [UIImage imageNamed:@"image1.png"];
}

次に、他のビューコントローラの-viewDidLoadメソッドで、前のようにSecondViewControllerのビューをサブビューとして追加します。

- (void)viewDidLoad
{
     [super viewDidLoad];

     SecondViewController *secondVC = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];

     [self.view addSubview:secondVC.view];
}
于 2012-08-01T19:32:09.010 に答える
0

IB を介して myImageView を設定すると、myImageView がインスタンス化されます。上記のコードを使用すると、myImageView がインスタンス化されます。

SecondViewController viewDidLoad または initWithFrame に次の行を追加する必要があります。

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,100,100)]
secondView.myImageView = imageView;

[ありがとうH2CO3]

于 2012-08-01T18:22:46.850 に答える