【问题标题】:How to access "name" of UIImageView in .m file如何在 .m 文件中访问 UIImageView 的“名称”
【发布时间】:2013-12-20 20:17:33
【问题描述】:

当我在 ViewController.h 中声明这样的图像时:IBOutlet UIImageView *circle

我如何才能访问我的 ViewController.m 文件中的“名称”circle

我需要这个“名称”来确定我要显示的图像。

UIImageView *selected = (UIImageView *)[touch view];
selected.image = [UIImage imageNamed:@"   circle goes here   "]; 

非常感谢代码示例 :) 提前致谢。

【问题讨论】:

  • 伙计们,这不是关于图像文件名的问题的重复。发帖人想找到指向图像视图的 IBOutlet 的实例变量的名称。为此,您需要使用目标 C 运行时编写一些自省代码。请投票重新打开问题,以便我可以提供问题的实际答案

标签: ios objective-c uiimageview


【解决方案1】:

与其动态搜索名为 circle 的属性,我建议您在 viewDidLoad 方法或界面生成器中将唯一的 tag 正确设置为您拥有的 circle 图像视图,无论是什么合适的:

-(void)viewDidLoad {
    //.........
    circle.tag = 999; //or any other value that lets you determine it uniquely 
    //.........
}

然后在您的代码中的任何位置,您都可以通过像这样验证其tag 属性来确定视图是否为circle uiimageview:

UIImageView *selected = (UIImageView *)[touch view];
if(selected.tag == 999) {
    selected.image = [UIImage imageNamed:@"   circle goes here   "]; 
}

【讨论】:

  • 嗨,Ayan,感谢您的回答。您不建议动态获取此属性名称(圆圈)的原因是什么?是不可能还是?
  • 为了从一个类中动态确定一个属性,实际上你需要使用一个叫做“自省”的过程。为此,您需要在代码中使用“runtime.h”标头,并在运行时通过class_getProperty 函数内省类以确定属性(如果存在)。但是,这对运行时来说是一个很大的开销,我不建议像您尝试那样执行简单的任务。
【解决方案2】:
UIImage *myImage  = [[UIImage alloc] init];

NSString *strProp = NSStringFromSelector(@selector(myImage));

NSLog(@"%@", strProp);

输出:

myImage

【讨论】:

  • 我不想对每张图片都有一个 if 语句。我寻找更动态的解决方案:)
【解决方案3】:

来自this SO question

UIImage 没有内置该功能,因为图像不是 总是从文件中加载。但是,您可以创建一个自定义 UIImageView 子类以满足您的需求。

【讨论】:

  • 您应该将其标记或关闭投票作为重复。目前,与原始帖子相比,您的帖子不包含任何附加价值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-29
  • 2020-01-15
  • 1970-01-01
  • 2022-12-20
  • 1970-01-01
相关资源
最近更新 更多