2011-08-16 9 views
3

"checkbox.png"というプロジェクトと同じディレクトリに.pngというチェックマークの画像があります。そのイメージを背景としてUIImageViewを作成し、それをUITableViewCellsのアクセサリビューとして設定したいと思います。私は現在持っています:ファイルからUIImageViewを作成できません

UIView * v = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:@"checkmark.png"]]; 
v.backgroundColor = [UIColor redColor]; 
cell.accessoryView = v; 
[v autorelease]; 

これは動作しません。私はそれが私のuitableviewcellsの右側に小さな赤いボックスが表示され、正常に動作し、別のダミーのUIView(例。

v = [[UIView alloc] init]; 
v.backgroundColor = [UIColor redColor]; 

を作ることができます。チェックボックスを使用してビューが動作しない理由を私は「よく分かりません。ファイルへのパスを指定する方法に問題がありますか?

+0

画像ビューのフレームを確認して、幅と高さがあることを確認しましたか? – jtbandes

答えて

7

imageWithContentsOfFile:には、ファイルへのパスが必要です。単にファイル名を指定すると、現在のディレクトリ内のファイルが検索されますが、現在のディレクトリが通常iOSアプリケーション内にあるかどうか、または保証があるかどうかわかりません。

重要な点は、ファイルへの絶対パスを指定するか、名前だけを取り、メインバンドルのリソースを調べるimageNamed:を使用する必要があることです。言い換えれば

UIImage *image = [UIImage imageNamed:@"checkmark"]; 
UIView *view = [[UIImageView alloc] initWithImage:image]; 
imageNamed:のもう一つの利点は、それが(あなたが再びそれを使用する場合)画像をキャッシュすると、お使いのデバイスは、Retinaディスプレイを持っている場合、それは自動的に [email protected]バージョンを探すということです

。この動作を望まない場合は

、あなたは直接のパスを取得することができます:

NSString *imagePath = [[NSBundle mainBundle] pathForResourceNamed:@"checkmark" ofType:@"png"]; 
UIImage *image = [UIImage imageWithContentsOfFile:imagePath]; 

これは通常、より良いオプションです(あなたが勝ったので、それは大きな画像だと、あなたがそれをキャッシュしたくない場合非常に頻繁に使用している)。

1

imageWithContentsOfFile:メソッドを使用するには、ファイルパスが必要です。イメージがメインバンドルに含まれている場合は、トリック:

UIView * v = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"checkmark.png"]]; 
1

画像ファイルを追加したことを確認してくださいXCodeプロジェクトに追加します。同じディレクトリにあるだけでは不十分です。 XCode内から、[ファイル]メニューを選択し、プロジェクトに[ファイルを追加]を選択します。