2017-02-18 85 views
1

在我的应用程序中,我允许用户根据颜色更改一些UI元素。所以,我有一个形象的三个版本可用于一个按钮,我想选择编程形象:如何在Swift中访问图像资产(如数组)

PSEUDO CODE 
"image0", "image1", "image3" 
var userChoice:integer 

myButton.setImage("myImage"+userChoice , .normal) 

我见过所以这个解决方案: Programmatically access image assets

什么将是Swift等效代码?

现在我使用的图像文字:

self.But_Settings.setImage(#imageLiteral(resourceName: "settingswhite"), for: UIControlState.normal) 

但当然Xcode中改变了这一部分“#imageLiteral(资源名称:‘settingswhite’)”到无法编辑的图标。

+0

您认为这有帮助吗? :But_Settings.setImage(UIImage(命名为:“play.png”),用于:UIControlState.normal)。这里您使用的是资产的名称。 –

+0

@VandanPatel - 是的,这确实有帮助。我希望你已经把它作为答案,所以我可以信任你。尽管如此,谢谢。 – wayneh

+0

我刚刚那样做了。大声笑 –

回答

2

然后不要使用图像文字。图像文字就是这样 - 代码中的一个硬性值,在运行时不能改变。从您的包中动态加载图像:

if let image = UIImage(named: "myImage" + userChoice) { 
    self.But_Settings.setImage(image, for: .normal) 
} 
+0

是的!和DUH!谢谢 – wayneh

0

您认为这有帮助吗? :But_Settings.setImage(UIImage(命名为:“play.png”),用于:UIControlState.normal)。这里您使用的是资产的名称

0

由于它的选择有限,它听起来像是一个枚举的好地方。

enum ImageChoice: Int { 
case zero = 0, one, two 

var image: UIImage { 
switch self { 
    case .zero: 
    return // Some Image, can use the icon image xcode provides now 
    case .one: 
    return //another image 
    case .two: 
    return //another image 
    } 
} 
} 

然后,您可以通过使用Int值初始化enum来轻松获取正确的图像。

guard let userChoice = ImageChoice(rawValue: someInt) else { return //Default Image } 
let image = userChoice.image 
相关问题