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")

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...