有没有办法检查通过 nib 加载的视图以查找 imageViews 中图像的资源名称?

Posted

技术标签:

【中文标题】有没有办法检查通过 nib 加载的视图以查找 imageViews 中图像的资源名称?【英文标题】:Is there a way to inspect a view loaded via nib to find the resource names of images in the imageViews? 【发布时间】:2011-03-01 14:51:12 【问题描述】:

寻找支持 Retina 显示器的简单方法。我突然想到,如果我可以通过一个 nib-loaded 的视图查看并获取那里使用的所有图像资源的名称,我可以检查它们是否有相应的视网膜图像并加载它(如果它是一个视网膜设备。)

我知道如何在加载后遍历子视图,但我不知道如何(或者如果可以的话)获取在 Interface Builder 中设置的资源名称。我试图避免在代码中设置所有图像名称。

我想做的事(伪代码):

for subView in self.view.subviews:
    if subView is UIImageView:
        resourceName = (UIImageView *)subView.imageName
        if retinaResourceFileExists(resourceName) and isRetinaDisplay:
            (UIImageView *)subView.image = retinaImage(resourceName)

(奖励:也许有一种方法可以遍历 IBOutlet 变量,但我对此表示怀疑?)

【问题讨论】:

【参考方案1】:

使用[UIImage imageNamed:@"Foo"];,设备会自动加载@2x 图像。

Interface Builder 也会自动加载视网膜图像。

【讨论】:

该死的太棒了。 请注意,在 ios4 (?) 之前,您必须在 imageNamed 中使用的文件名中包含扩展名。但它仍会加载 @2x 图像。

以上是关于有没有办法检查通过 nib 加载的视图以查找 imageViews 中图像的资源名称?的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 .nib 加载视图控制器失败

Interface Builder:如何从 nib 文件加载视图

从 NIB 加载视图以用作滚动视图中的页面会取消自动布局

当视图控制器从 nib 文件加载时,以模态方式在当前上下文中呈现视图控制器

以编程方式创建视图 VS。笔尖

通过 nib 加载单元格并引用其中的组件