4

我正在尝试对 XIB 做一些花哨的事情,其中​​包括想要以某种方式获取和存储从 xib 加载的图像的路径。为此,我创建了一些类别并进行了一些方法调配以覆盖所有 UIImage 构造函数以在调用其父构造函数之前保存它们的路径。

但是由于Apple的黑盒BS及其所有XIB东西,当我通过[UIViewController initWithNib ...]创建UIImageView时,似乎没有一个暴露的UIImage构造函数被调用。

有人知道发生了什么函数调用或他们是如何做到的吗?我找不到任何信息来揭示 initWithNib 在幕后实际所做的事情。

谢谢!

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

4

3 回答 3

2

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

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

于 2012-04-03T22:53:37.827 回答
1

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

听起来你想捕捉从 XIB 文件实例化的东西。那将是父类UIView[initWithCoder:]方法。

正如UIView文档所说

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

于 2012-04-03T22:51:52.520 回答
1

你们都接近正确-我尝试这样做,UIImageView这对initWithCoder你们都建议有效。但是,由于某种原因,UIImage 没有被initWithCoder调用,而是使用initWithCGImageStored:(CGImageRef)cgImage scale:(CGFloat)scale orientation:(UIImageOrientation)orientation.

如果并且当我真的按照我的意愿走出这条路时,我会把它贴在这里。谢谢大佬帮忙

于 2012-04-03T23:01:40.283 回答