从XIB创建时如何构造UIImage?

时间:2012-04-03 22:45:15

标签: iphone ios interface-builder xib nib

我正试图对XIB做一些好看,其中包括想要以某种方式获取并存储从xib加载的图像的路径。为了做到这一点,我做了一些类别并做了一些方法调整以覆盖所有UIImage构造函数,以在调用其父构造函数之前保存它们的路径。

但是由于Apple的黑盒子BS带有他们所有的XIB东西,当我通过[UIViewController initWithNib ...]创建UIImageView时,绝对没有任何暴露的UIImage构造器被调用。

有人知道调用什么函数或者他们是怎么做的吗?我无法找到任何暴露initWithNib在幕后实际执行的操作的信息。

谢谢!

编辑: 如果您处于类似情况,可以尝试使用自动填充图像路径的accessibilityLabel / accessibilityHint。唯一的问题是需要启用可访问性或这些值为零。

3 个答案:

答案 0 :(得分:2)

我知道根据NSCoding协议,从Nib构造的对象正在被取消归档;在这种情况下,您需要覆盖initWithCoder:

您可以使用swizzling替换UIImageView的initWithCoder:方法,然后窥探以查看任何编码器键中的图像名称或路径是否可用。这可能比攻击UIImage本身更有效,因为我们知道UIImageView可能正在使用您无权访问的自定义子类。

答案 1 :(得分:1)

initWith...方法适用于以编程方式创建UIImageView个对象。

听起来你想从XIB文件中实例化它们。这将是父类UIView的{​​{3}}方法。

作为[initWithCoder:]

  

initWithCoder: - 如果从中加载视图,请实现此方法   Interface Builder nib文件和您的视图需要自定义   初始化。

答案 2 :(得分:1)

你们两个都很接近 - 我试着用UIImageView做这件事,这对initWithCoder有效,正如你们所建议的那样。但是,UIImage由于某种原因未被initWithCoder调用,而是使用initWithCGImageStored:(CGImageRef)cgImage scale:(CGFloat)scale orientation:(UIImageOrientation)orientation

如果我真的想要走出这条路,我希望我会在这里发布。谢谢你的帮助,男士。