2016-10-13 3 views
1

私は2 UIButtonの状態のためUIImage同じに設定しようとしている - ノーマルと.normalオプションはUIButtonのため、状態は、optionでは動作しません(スウィフト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の配列リテラルはビット単位のOR値を表します。したがって

そして

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

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

は、optionの種類を取ることは、あなたが常にそれに結合された値を渡すことができるという意味ではありません。あなたの場合、は2つの方法としてが必要です。

+0

「OptionSet」に0の値を使用した理由はありますか?それは私にとって意味をなさない... AFAIKほとんどのオプション設定変数は、1,2,4,8などのような単一のビットですので、あなたはビットごとのORを行うことができます。 '.normal'に0が使われた理由は? – OgreSwamp

関連する問題