0

在我的 Mac OS X 项目中,我有一个滑块和几个“编号”的 NSImageView 插座。根据滑块值,我想处理相应的 NSImageView 以进行进一步的操作。

像这样的东西:

sliderRed value == 1 -> red1  
sliderRed value == 2 -> red2  
sliderRed value == 3 -> red3  
sliderRed value == 4 -> red4
... and so forth

目前我不知道如何做到这一点,我不想使用案例构造。

任何想法如何做到这一点?

@property (strong) IBOutlet NSSlider *sliderRed;

@property (strong) IBOutlet NSImageView *red1;
@property (strong) IBOutlet NSImageView *red2;
@property (strong) IBOutlet NSImageView *red3;
@property (strong) IBOutlet NSImageView *red4;
@property (strong) IBOutlet NSImageView *red5;
@property (strong) IBOutlet NSImageView *red6;
@property (strong) IBOutlet NSImageView *red7;
@property (strong) IBOutlet NSImageView *red8;
@property (strong) IBOutlet NSImageView *red9;
@property (strong) IBOutlet NSImageView *red10;
@property (strong) IBOutlet NSImageView *red11;
@property (strong) IBOutlet NSImageView *red12;
@property (strong) IBOutlet NSImageView *red13;
@property (strong) IBOutlet NSImageView *red14;
@property (strong) IBOutlet NSImageView *red15;
4

2 回答 2

1

您可以使用键值编码:

NSString *key = [NSString stringWithFormat:@"red%d", sliderValue];
NSImageView *imageView = [self valueForKey:key];

缺点是编译器无法检查密钥的有效性。如果sliderValue 超出范围 1 .. 15 (在您的情况下),您将获得运行时异常。

于 2013-05-07T06:55:22.603 回答
0

您可以将标签添加到所有 NSImageView(s)

red1.tag = 1;
red2.tag = 2;
.
.
.
red15.tag = 15;

现在将这些 NSImageView 实例保存在一个数组中;

NSMutableArray *arrayOfImageViews = [NSMutableArray array];
[arrayOfImageViews addObject:red1];
[arrayOfImageViews addObject:red2];
.
.
.
[arrayOfImageViews addObject:red15];

完成后,您可以循环遍历特定滑块值上的数组元素。

NSImageView *selectedImageView = nil;
//Lets say your slider value is 7 for now.
for(NSImageView *imageView in arrayOfImageViews)
{
 if(imageView.tag==mySlider.value)
 {
  selectedImageView = imageView;
  break;
 }
}

此循环结束后,您将在 selectedImageView 中拥有 NSImageView。您现在可以使用它来完成您的任务。

于 2013-05-07T04:47:39.483 回答