アラのアラアラしい日記

こっそりかいてます

objective-cのループ内での表示とか非表示とか

こんにちは!okomeが好きな人です。

相変わらず仕事でobjective-cを触る毎日ですが、
地味に時間がかかってしまったのでメモです。

Storyboardを使って画像を表示するような場合、

@property (weak, nonatomic) IBOutlet UIImageView *okomeView;

このように変数を定義して、

UIImage *okomeImage = [UIImage imageNamed:@"okome.png"];
self.okomeView.image = okomeImage;

と、指定した変数に対して画像をセットするのがありがちだと思いますが、

例えば3つの画像を並べて表示したい場合、以下のように変数を定義して、

@property (weak, nonatomic) IBOutlet UIImageView *okomeView0;
@property (weak, nonatomic) IBOutlet UIImageView *okomeView1;
@property (weak, nonatomic) IBOutlet UIImageView *okomeView2;

「よしループで表示だ!」と思ったらobjective-cの場合は変数のループってどうやってまわすんだってなってしまったんですよね。。。

そこで、調べてみると表示方法にもいくつか種類があることを知りました。
先程の画像の表示を違う方法で書くと以下のようになります。

  [[self okomeView] setImage:okomeImage];

この表示方法を利用すると、以下のようにループ文を書くことが出来ます。

for (int i=0; i<3; i++) {
  NSString *attr = [[NSString alloc] initWithFormat:@"okomeView%d", i];
  [[self valueForKey:attr] setImage:okomeImage];
}

流れとしては、最初にokomeView{i}になるような文字列をセットして、
それを利用して先程の表示方法を書きます。

この方法を利用すると以下のようなhiddenなども指定することが出来ます。

  [[self okomeView] setHidden:YES];

set系の関数むちゃくちゃ多いので色々出来そうですね。

もっと良い書き方とかを知っている方は教えてください!