2016-10-13 1 views
1

Я пытаюсь установить то же UIImage для 2 UIButton «s состояний - Normal и Подчеркнул.Normal опция не работает в состоянии OptionSet для UIButton (Swift 3)

UIControlState является OptionSet, поэтому должна работать, если я передаю массив.

myButton.setImage(UIImage(named: myButtonImageName), for: [.normal, .highlighted]) 

Но код выше установить только.highlighted состояние и игнорирует .normal (изображение, установленное ранее в IB по-прежнему отображается в .normal состоянии)

Но, если я запускаю его как 2 методов его работы:

myButton.setImage(UIImage(named: myButtonImageName), for: .normal) 
myButton.setImage(UIImage(named: myButtonImageName), for: .highlighted) 

Я что-то упустил?

ответ

1

В Swift массивный массив для OptionSet представляет бит-ORED-значение.

И

UIControlState.normal.rawValue //->0 
UIControlState.highlighted.rawValue //->1 

Таким образом:

([.normal, .highlighted] as UIControlState).rawValue //->1 

Принимая тип OptionSet не означает, что вы всегда можете передать комбинированное значение для него. В вашем случае необходимо указать как 2 метода.

+0

У вас есть идея, почему они использовали значение 0 для 'OptionSet'? Это не имеет никакого смысла для меня ... AFAIK большинство переменных набора параметров - это отдельные биты, например 1,2,4,8 и т. Д. Таким образом, вы можете делать побитовое ИЛИ. Любые идеи, почему 0 был использован для '.normal'? – OgreSwamp