2017-02-18 3 views
1

В моем приложении я разрешаю пользователю изменять некоторые элементы пользовательского интерфейса на основе цвета. Итак, у меня есть три варианта изображения, которые могут быть использованы для кнопки, и я хотел бы, чтобы выбрать изображение программно:Как получить доступ к объектам изображения, подобным массиву в Swift

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

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

Я видел это решение в SO: Programmatically access image assets

Что будет ли эквивалентный код Swift?

Сейчас я использую изображение буквальным:

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

но конечно Xcode изменяет эту часть «#imageLiteral (ResourceName:„settingswhite“)» на иконку, которая не может быть отредактирован.

+0

Считаете ли вы, что это поможет? : But_Settings.setImage (UIImage (named: "play.png"), для: UIControlState.normal). Здесь вы используете имя актива. –

+0

@ VandanPatel - Да, это действительно помогает. Хотелось бы, чтобы вы дали ему ответ, чтобы я мог вас счесть. Тем не менее, спасибо. – wayneh

+0

Я просто сделал это. lol –

ответ

2

Тогда не используйте литерал изображения. Литералы изображений - это просто то, что вы не можете изменить во время выполнения. Загрузите изображение динамически из вашего пакета:

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

Да! и DUH! благодаря – wayneh

0

Как вы думаете, это поможет? : But_Settings.setImage (UIImage (named: "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.

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