2015-06-30 70 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等等...... –