2015-06-30 37 views
0

基本上我在我的项目中有一堆变量,其名称是相同的,只有一个数字是不同的。我必须编写一个代码,这对所有变量来说都是一样的,但是一个数字会发生变化。实际的问题是,所有这些变量出口连接到IB中的对象。 例子:Objective-C |奥特莱斯收集OSX

-(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

您可以使用键 - 值编码为这样的:

-(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]; 
} 
+0

即使在AppleScriptObjC中,第二种替代方法也能很好地工作,在第一个中你忘记完成“forKeyPath:”的参数,但尽管这给我一个错误。 –

+0

糟糕。在第一个版本中,该部分行不应该存在,但我忽略了删除它。我修复了它。 –

0

sender是按钮对象,只是使用它。

-(IBAction)setNames:(id)sender { 

    int key = (int)[sender tag]; 
    [sender setTitle:[NSString stringWithFormat:@"Clicked Button %d", key]]; 
} 

编辑:OK,我看你已经改变了代码的问题。如何构建一个将按钮标签与图像视图关联的字典?所以,这样的事情:

@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]; 
} 
+0

其实我拥有的是:A键是点击按钮,如果是按钮1,然后我把图像放在imageView1等等...... –