【问题标题】:How does UIImage get constructed when created from an XIB?从 XIB 创建时如何构造 UIImage?
【发布时间】:2012-04-17 15:41:46
【问题描述】:

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

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

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

谢谢!

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

【问题讨论】:

  • 为什么不只是子类UIImageUIImageView 并将XIB 中的对象设置为您的新EliImageEliImageView 对象,然后您可以做各种疯狂的事情。
  • 很遗憾,我仍然无法从中获取图像路径。
  • @Eli 如果图像可以从 xib 加载,那么它们就在你的包中,对吧?我认为这是您的图像路径的直线。
  • 嗯,是的,但是你不知道为哪个图像加载了哪个路径。

标签: iphone ios interface-builder xib nib


【解决方案1】:

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

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

作为UIView documentation says

initWithCoder: - 如果你从一个 Interface Builder nib 文件和您的视图需要自定义 初始化。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 嗨本扎多!我正在努力做到这一点,知道如何在 initWithCoder 上获取图像名称吗?谢谢
    【解决方案3】:

    你们都很接近正确 - 我尝试使用 UIImageView 执行此操作,这适用于 initWithCoder,正如你们所建议的那样。但是,由于某种原因,UIImage 没有调用initWithCoder,而是使用了initWithCGImageStored:(CGImageRef)cgImage scale:(CGFloat)scale orientation:(UIImageOrientation)orientation

    如果我真的按照自己的意愿走出这条路,我会把它贴在这里。谢谢各位大神帮忙。

    【讨论】:

    • 你有没有想过这个问题?
    • 不幸的是,我最终潜入了 XML。
    猜你喜欢
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    相关资源
    最近更新 更多