0

更新された質問をより明確に確認するには、下にスクロールします..特定の UIImageView (IBOutlet) の名前が変数に格納されている場合、それを使用して表示される画像を変更するにはどうすればよいですか。これを試しましたが、うまくいきません。

私はまだiPhoneプログラミングに慣れていないので、助けていただければ幸いです。

NSString *TmpImage = @"0.png";
NSString *Tst = @"si1_1_2";

TmpImage = @"1.png";
UIImage *sampleimage = [[UIImage imageNamed:TmpImage] retain];


((UIImageView *) (Tst)).image = sampleimage;    // This is the line in question 
[sampleimage release];

再表明:

画面にたくさんの画像があります.... UIImageView *s1, *s2 ,*s3 など *s10 まで
ここで、それぞれが表示する画像を同じ画像に更新したいとします。 s1.image = sampleimage;
を実行するのではなく、 s2.image = サンプル画像; : s10.image = サンプル画像;




1 から 10 までの for ループを作成し、画像を更新する行の一部としてループ変数を使用するにはどうすればよいでしょうか。
このようなもの。
for ( i = 1; i <- 10; ++i )
s(i).image = サンプル; // 私はそれがうまくいかないことを知っています


基本的な質問は、変数をステートメントの一部として組み込んで画像にアクセスするにはどうすればよいですか? 私の例にとらわれないでください。主な問題は、要素/オブジェクトへのアクセスの一部として変数を使用する方法です。

結論... UIImageView の名前を NSString オブジェクトに組み込むことができれば、その NSString オブジェクトを使用して UIImageView を操作するにはどうすればよいでしょうか。

ありがとう!

4

1 に答える 1

1

うーん!問題の行:

((UIImageView *) (Tst)).image = sampleimage;

文字列ポインターをUIImageViewポインターとしてキャストしています-基本的に、文字列へのポインターは実際にはUIImageViewへのポインターであると言っています! これはコンパイルされますが (コンパイラはあなたのアサーションを問題なく受け入れるため)、もちろん実行時にクラッシュします。

UIImageView 型の変数を宣言する必要があります。これにより、イメージを設定するビューを保持できます。したがって、コードは次のようになります。

NSString *TmpImage = @"0.png";
UIImageView *myImageView;

If (someCondition == YES) {
    myImageView = si1_1_2;  //Assuming this is the name of your UIImageView
} else {
    myImageView = si1_1_3;  //etc
}

UIImage *sampleimage = [UIImage imageNamed:TmpImage];  //no need to retain it
myImageView.image = sampleImage;

うまくいけば、これは理にかなっています!

編集: 追加する必要があります。なぜ複数の UIImageViews を使用しようとしているのでしょうか? UIImageView の画像はいつでも変更できる (そして実際には多くの画像を保持できる) ため、UIImageView を 1 つだけにして、その中の画像を変更するだけの方がよいのではないでしょうか?

于 2009-08-27T15:48:38.280 に答える