我正试图对XIB做一些好看,其中包括想要以某种方式获取并存储从xib加载的图像的路径。为了做到这一点,我做了一些类别并做了一些方法调整以覆盖所有UIImage构造函数,以在调用其父构造函数之前保存它们的路径。
但是由于Apple的黑盒子BS带有他们所有的XIB东西,当我通过[UIViewController initWithNib ...]创建UIImageView时,绝对没有任何暴露的UIImage构造器被调用。
有人知道调用什么函数或者他们是怎么做的吗?我无法找到任何暴露initWithNib在幕后实际执行的操作的信息。
谢谢!
编辑: 如果您处于类似情况,可以尝试使用自动填充图像路径的accessibilityLabel / accessibilityHint。唯一的问题是需要启用可访问性或这些值为零。
答案 0 :(得分:2)
我知道根据NSCoding协议,从Nib构造的对象正在被取消归档;在这种情况下,您需要覆盖initWithCoder:
。
您可以使用swizzling替换UIImageView的initWithCoder:
方法,然后窥探以查看任何编码器键中的图像名称或路径是否可用。这可能比攻击UIImage本身更有效,因为我们知道UIImageView可能正在使用您无权访问的自定义子类。
答案 1 :(得分:1)
initWith...
方法适用于以编程方式创建UIImageView
个对象。
听起来你想从XIB文件中实例化它们。这将是父类UIView
的{{3}}方法。
initWithCoder: - 如果从中加载视图,请实现此方法 Interface Builder nib文件和您的视图需要自定义 初始化。
答案 2 :(得分:1)
你们两个都很接近 - 我试着用UIImageView
做这件事,这对initWithCoder
有效,正如你们所建议的那样。但是,UIImage由于某种原因未被initWithCoder
调用,而是使用initWithCGImageStored:(CGImageRef)cgImage scale:(CGFloat)scale orientation:(UIImageOrientation)orientation
。
如果我真的想要走出这条路,我希望我会在这里发布。谢谢你的帮助,男士。