0

私は画像の多い iOS アプリを使用していますが、ほぼ同じ行を何度も入力していることに気付きました。

...
A016.image = [UIImage imageNamed:img21];
A017.image = [UIImage imageNamed:img21];
A018.image = [UIImage imageNamed:img21];
...

今、私はあなたに尋ねます: UIImageViews の名前を配列などに保存する方法はありますか? 私の非常に醜いコードを美化するためだけに。/ジョン

4

2 に答える 2

0

はい、UIImageViews を配列に入れて for に入れることができます。

UIImageView * imageView1;
UIImageView * imageView2;
UIImageView * imageView3;
NSArray * imageViewsArray = [NSArray arrayWithObjects:imageView1,imageView2,imageView3,nil];

for (UIImageView * currentImageView in imageViewsArray) {

     currentImageView.image = [UIImage imageNamed:img21];

}
于 2012-09-15T14:36:48.477 に答える
0

もちろん、そのようなものを単純化することもできます。しかし、文脈が正確に何であるかは完全には明らかではありません。

配列にすべての画像ビューがある場合、次のようなことができます。

// Assume an NSArray called imageViews exists with all the UIImageView instances in it.
for (UIImageView *imageView in imageViews) {
    imageView.image = [UIImage imageNamed:img21];
}

画像ビューがまだ配列になく、実際に A016、A017 などと呼ばれている場合は、コード設計を変更することをお勧めします。このようなことは決して良い考えではありません。その結果、コードの保守が難しくなります。これがある種の画像テーブルである場合は、最初に画像ビューを配列に入れてみてください。

そうは言っても、そのような変数を配列に入れる方法はあります。それらが @properties または ivar として宣言されている場合、次のようなことができます。

NSMutableArray *imageViews = [NSMutableArray arrayWithCapacity:20];
for (int i = 0; i < 20; i++) {
    NSString *variableName = [NSString stringWithFormat:@"A0%d", i];
    UIImageView *imageView = [self valueForKey:variableName];
    [imageViews addObject:imageView];
}

その後、配列を ivar として保存し、上記と同じことを行うことができます。

よりハードコードされたバージョンは、画像ビューを自分で配列に入れるだけです。

NSArray *imageViews = [NSArray arrayWithObjects:..., A016, A017, A018,..., nil];

しかし、そのようなインデックス付き変数名を使用しないことを強くお勧めします。

于 2012-09-15T14:37:44.263 に答える