基本上我的项目中有一堆变量,其名称相同,只有一个数字不同。我必须编写一个代码,对于所有变量几乎都是相同的,但数字会发生变化。实际问题是所有这些变量都出口连接到IB中的对象。 例如:
-(IBAction)setImages:(id)sender {
int key = (int)[sender tag];
if (key == 1) {
[imageView1 setImage:myImage];
} else if (key == 2) {
[imageView2 setImage:myImage];
} else if (key == 3) {
[imageView3 setImage:myImage];
}
}
我想要的是:
-(IBAction)setImages:(id)sender {
int key = (int)[sender tag];
[imageView(key) setImage:myImage];
}
这只是一个例子,不是我的代码中的实际内容,而是在AppleScriptObjC中编写。
任何帮助都会非常感激!
提前致谢
[编辑代码以更好地解释我的需要]
答案 0 :(得分:0)
sender
是按钮对象,只需使用它。
-(IBAction)setNames:(id)sender {
int key = (int)[sender tag];
[sender setTitle:[NSString stringWithFormat:@"Clicked Button %d", key]];
}
修改:好的,我看到你改变了问题中的代码。如何构建一个将按钮标签与图像视图相关联的字典?所以,像这样:
@property( strong, nonatomic ) NSMutableDictionary* imageViews;
...
- (void) viewDidLoad {
// Set up the dictionary here.
self.imageViews = [NSMutableDictionary dictionary];
self.imageViews[@(1)] = imageView1;
self.imageViews[@(2)] = imageView2;
...
self.imageViews[@(20)] = imageView20;
}
- (IBAction) setImages:(id)sender {
int key = (int)[sender tag];
NSImageView* imageView = self.imageViews[@(key)];
[imageView setImage:myImage];
}
答案 1 :(得分:0)
您可以使用键值编码:
-(IBAction)setImages:(id)sender {
int tag = (int)[sender tag];
NSString* key = [NSString stringWithFormat:@"imageView%d", tag];
NSImageView* imageView = [self valueForKey:key];
imageView.image = myImage;
}
或者,大致相当于:
-(IBAction)setImages:(id)sender {
int tag = (int)[sender tag];
NSString* keyPath = [NSString stringWithFormat:@"imageView%d.image", tag];
[self setValue:myImage forKeyPath:keyPath];
}