我有一个包含 Storyboard和一组默认图像的框架。该框架可以包含在多个应用程序中,其目的是应用程序可以在需要时使用自己的变体覆盖所有默认图像。
我面临的问题是我还没有找到适用于所有场景的解决方案,例如:如果框架包含一个名为 Person 的图像,并且该框架由提供自己版本的 Person 的应用程序 A 使用,并且该框架由不提供自己版本的 Person 的应用程序 B 使用:
如果框架使用如下代码设置图像:
let image = UIImage.init(named: "Person")
someImageView.image = image
然后,当应用程序 A 运行时,会找到并正确显示其人物图像的变体。 (应用程序 A 在其 Assets 目录中有它的 Person 变体)但是,当应用程序 B 运行时,没有任何显示。
另一方面,如果我不使用代码设置图像(即它在 Xcode 的属性检查器中为 Storyboard ImageView 设置),那么当应用程序 B 运行时,现在默认框架图像显示正确,但是现在应用程序未显示 A 的自定义人物图像。
有没有一种方法可以成功涵盖这三种情况:
默认图像在框架中,应用 A 和应用 B 都不想用他们的自定义图像覆盖它 默认图像在框架中,应用程序 A 想要覆盖它,但应用程序 B 没有。 默认图像在框架中,应用程序 A 和应用程序 B 都想用自己的变体覆盖它。 (我有一个大型 Storyboard,框架中有几十张图片,理想情况下,我希望有一个解决方案,如果可能的话,根本不涉及任何代码 - 即默认图像名称是通过 Xcode 的属性检查器为 ImageView 设置的,如果应用程序在其 Assets 目录中提供自己的图像版本,该图像会自动显示)
最佳答案
此代码有效,但看起来有点笨拙,如果有一个可能的无代码解决方案,那就太好了——例如,只需使用 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, in: bundle, compatibleWith: nil)
{
return image
}
else
{
assert(false, "Unable to find image \(name)")
return nil
}
}
}
}
...
theImage.image = getImage(name: "Person")
关于ios - 在框架中覆盖 Storyboard中的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39006955/