2012-04-28 30 views
0

我正在尝试数组项目作为对象名称。如何使用plist NSString项目作为UIImageView对象名称

我有5个UIImageView旗下成立:

@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

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

我需要使用NSStringUIImageView对象名称,像这样:

一个UIButton标签索引选择对象

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

对象名称非常感谢您的任何帮助。

回答

1

这将是更容易图像视图对象直接保存到阵列中,而不是试图用一个字符串来检索。

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

Hoever,就你而言,你有一个数字索引。只需将UIImageView对象直接保存到数组中即可。这不会复制这些对象 - 它只是将引用保存到数组中。 Gack。

0

尝试object_getInstanceVariable

#import <objc/runtime.h> 

... 

UIImageView *imageView = nil; 
NSString *name = [array objectAtIndex:[sender tag]]; 
object_getInstanceVariable(self, [name UTF8String], (void**)&imageView); 
+0

Gack。真?使用底层的Objective C运行库作为新手的解决方案?!?文档说该方法返回“指向Ivar数据结构的指针,该数据结构定义了由名称指定的实例变量的类型和名称”。假设实例变量包含一个对象,它与指向对象的高级指针是一样的吗?文档说iVar是“一个代表实例变量的不透明类型”。 – 2012-04-28 23:28:56

相关问题