2012-01-24 10 views
1

を働いていない私は、一般的に(のようなviewDidLoad)、その上に、その後、作成元のオブジェクトを解放するプロパティホールドを持っている私の方法でオブジェクトを作成するためのパターンを踏襲してきました。したがって、このような何か:UIImageViewのはalloc] initWithImage使用IBOutletは

NSArray *myArray = [NSArray alloc] initWithObjects:@"1", @"2", @"3", nil]; 
self.array = myArray; 
[myArray release]; 

私はUIImageViewと同じことを行うことができると思いました。私は私の.xibで作成UIImageViewを持っています。私は私のviewDidLoadでそう

@property (nonatomic, retain) IBOutlet UIImageView *imageView; 

のような性質であることへの出口を持って、私が行います

UIImageView *imgView = [[UIImageView alloc] initWithImage;[UIImage imageNamed:@"arrow.png"]]; 
self.imageView = imgView; 
[imgView release]; 

私はこれを実行すると、私は画面上に何かを得ることはありません。私はちょうどこの代わりに私のviewDidLoadで操作を行う場合は、:

[self.imageView setImage:[UIImage imageNamed:@"arrow.png"]]; 

私は、画面上の私の矢印画像を入手できますか。 UIImageViewについて相違しているものがありますか?

最初の応答のため編集:UIImageViewUITableViewとは異なりますが、現在のビューにサブビューとして追加する必要がありますか?私はIBUITableViewを作成するときに、私はviewDidLoadsubviewとして追加しないでください。

ありがとうございました。

答えて

5

あなたはどのようにIBOutlet作品の背後にあるポイントを逃しています。何かが.xibに指定されている場合、あなたはそれを使用:)のためにそれがすでに割り当てられています。

したがって、[self.imageView setImage:[UIImage imageNamed:@"arrow.png"]];は画像を割り当てたばかりなので、動作します。しかし

UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrow.png"]]; 
self.imageView = imgView; 
[imgView release]; 

をやってますが、実際に self.imageView = imgView;ラインで IBによって作成された imageViewインスタンスを割り当て解除し、新しいものを設定し、どちらもやったあなたは何にサブビューとして追加されません。新しいインスタンスなので、追加する必要があります!しかし、とにかくこのアプローチはあなたが使用している場合は間違っています IBOutlet

0

あなたはあなたのビュー階層にself.imageViewを追加する必要があります。

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.imageView = ... 

    // You are missing this part! 
    [self.view addSubview:self.imageView]; 

    ... 
} 

PS。 Interface Builderを使用してビューを構築していないため、UIImageViewプロパティをIBOutletとマークする必要はありません。

+0

.xibファイルで作成されているので、まだ追加されていませんか?私がUITableViewを持っているときと同じように、私はviewDidLoadのサブビューとしてそれを追加しません。 –

+0

xibファイルで作成したものが、viewDidLoadのself.imageView = imgViewと言ったときにオーバーライドされました。 IBを使用している場合は、viewDidLoadでIBを再作成しないでください –

関連する問題