Using Xcode 9.2 none of the above solutions worked for what I was looking for.
I was looking for a solution that will let me set .normal
and .selected
UIControlState
images inside the storyboard for their original rendering mode, but, inside the Swift file, no string literals should exist regarding the image names.
Basically, inside your code you will get the image you set inside your storyboard for .normal
state and re-render it as .alwaysOriginal
(Same for .selected
state), then, you will set that image (which is now rendered as original and won't be affected by the tint) for the relevant state (.normal
and .selected
) of your UIButton
.
Here it is:
let unselectedImage = yourButton.image(for: .normal)?.withRenderingMode(.alwaysOriginal)
yourButton.setImage(unselectedImage, for: .normal)
let selectedImage = yourButton.image(for: .selected)?.withRenderingMode(.alwaysOriginal)
yourButton.setImage(selectedImage, for: .selected)
This way you can set your button image states and if the image name will change, it won't affect your code.