ios – 在框架中的故事板中覆盖图像

前端之家收集整理的这篇文章主要介绍了ios – 在框架中的故事板中覆盖图像前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个包含故事板和默认图像的框架.该框架可以包含在多个应用程序中,并且意图是应用程序可以覆盖没有,一些或所有默认图像与自己的变体,如果他们需要.

我所面临的问题是,我没有找到适用于所有情况的解决方案,例如:如果框架包含一个名为Person的图像,并且该框架由App A使用,该应用程序提供自己的Person版本,并且框架被应用程序B使用,不提供自己的版本的Person然后:

如果框架使用以下代码设置图像:

let image = UIImage.init(named: "Person")
someImageView.image = image

然后,当运行应用程序A时,会找到并显示Person图像的变体. (应用程序A在其资产目录中有其变体Person)但是,当应用程序B运行时不显示任何内容.

另一方面,如果我不使用代码设置图像(即它在Xcode的属性检查器中为故事板图像视图设置),那么当应用程序B运行时,现在默认框架图像正确显示,但是现在应用程序A的自定义人员图像不显示.

有没有办法可以成功地覆盖这三种情况:

默认图像在框架中,应用程序A和应用程序B都不希望使用自定义图像覆盖它
默认图像在框架中,应用程序A想覆盖它,但应用程序B不.
默认图像在框架中,应用程序A和应用程序B都要用自己的变体来覆盖它.
(我在框架中有一个大型的故事板,几十个图像,理想情况下,我希望有一个解决方案,如果可能的话,根本就不需要任何代码 – 即默认的图像名称是通过Xcode的属性检查器设置的,用于图像视图,如果应用程序在其资产目录中提供自己的图像版本,自动显示图像)

解决方法

这段代码可以工作,但似乎有点笨重,如果有一个无代码解决方案可能会变得如此 – 只要使用xcode / storyboard设置就可以了.
extension UIViewController {
    func getImage(name:String) -> UIImage?
    {
        var bundle = Bundle.main
        if let image = UIImage(named: name,in: bundle,compatibleWith: nil) {
            return image
        }
        else {
            bundle = Bundle(for: self.dynamicType)
            if let image = UIImage(named: name,compatibleWith: nil)
            {
                return image
            }
            else
            {
                assert(false,"Unable to find image \(name)")
                return nil
            }
        }
    }
}

theImage.image = getImage(name: "Person")

猜你在找的iOS相关文章