0

我正在尝试将数组项作为对象名称。

UIImageView设置了 5 秒:

@interface miniTestViewController : UIViewController {

    NSArray *array;

    IBOutlet UIImageView *sun;
    IBOutlet UIImageView *moon;
    IBOutlet UIImageView *rain;
    IBOutlet UIImageView *snow;
    IBOutlet UIImageView *hail;
}

-(IBAction)fadeChosenImage:(id)sender;

我的 plist 包含一系列图像名称:太阳、月亮、雨、雪、冰雹

在 .m VDL 存根中,此 plist 被读入NSArray *array.

UIButton标记选择索引处的对象:

-(IBAction)fadeChosenImage:(id)sender{

    NSString *image = [[NSString alloc] init];  
    image= nil;

    switch ([sender tag]) { 
        case 0: 
            image = [array objectAtIndex:[sender tag]]; 
            break; 
        case 1: 
            image = [array objectAtIndex:[sender tag]]; 
            break; 
        case 2: 
            image = [array objectAtIndex:[sender tag]]; 
            break; 
        case 3: 
            image = [array objectAtIndex:[sender tag]]; 
            break; 
        case 4: 
            image = [array objectAtIndex:[sender tag]]; 
            break; 
        default: 
            break;
    }

我需要使用NSString作为UIImageView对象名称,像这样:

[[array objectAtIndex:[sender tag]] setAlpha:0];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:6.0];
[[array objectAtIndex:[sender tag]] setAlpha:1];

但到目前为止objectAtIndex返回一个NSString不响应setAlpha消息的。

是否可以转换/包装/转换/使用NSString到对象名称UIImageVIew

非常感谢您的帮助。

4

2 回答 2

1

将图像视图对象直接保存到数组中会容易得多,而不是尝试使用字符串检索它们。

如果您想使用字符串作为键来查找对象,请将它们存储在字典中。

但是,在您的情况下,您有一个数字索引。只需将 UIImageView 对象直接保存到您的数组中。这不会复制对象 - 它只是将对它们的引用保存在您的数组中。

于 2012-04-28T22:32:31.450 回答
0

尝试object_getInstanceVariable

#import <objc/runtime.h>

...

UIImageView *imageView = nil;
NSString *name = [array objectAtIndex:[sender tag]];
object_getInstanceVariable(self, [name UTF8String], (void**)&imageView);
于 2012-04-28T03:04:27.447 回答