読者です 読者をやめる 読者になる 読者になる

IB上に配置したオブジェクトに対応関係を持たせたい

Objective-C

試行錯誤中。よいプラクティスがあればコメントなどいただけると幸いです。

たとえばIB上で

(上層)
Button A
Button B
Button C
imageView A
imageView B
imageView C
(下層)

のように配置したとして、
buttonAをタップしたときにimageViewAになんらかの変化をさせたい、
ついでに他にプロパティも持たせたい、
でもクラス化はしたくない(このビューの並び順を変えたくない)ときってどうすればいいのだろう…

とりあえずの解決策として、

- (void)_buildHogeInfo {
    NSDictionary* hogeInfo = @{
                          @"mochi" : @{
                                  @"button"  : self.mochiButton, // すでにIBOutlet接続をしてある
                                  @"name" : @"もち",
                                  },
                          @"dango" : @{
                                  @"button"  : self.dangoButton, // すでにIBOutlet接続をしてある
                                  @"name" : @"だんご",
                                  },
                          };
}
- (IBAction)touchDownHogeButtons:(id)sender {
    for (NSString* key in [self.hogeInfo allKeys]) {
        NSDictionary* info = [self.hogeInfo objectForKey:key];
        if (!info) continue;

        NSArray* innerKeys = [info allKeysForObject:sender];
        for (NSString* innerKey in innerKeys) {
            if ([innerKey isEqualToString:@"button"]) {
                NSLog(@"name: %@", [info objectForKey@"name"]); // ここでなんらかの処理
            }
        }
    }
}

こんなことしてました。うーん…