Используя Xcode 9.2, ни одно из вышеперечисленных решений не сработало для того, что я искал.
Я искал решение, которое позволило бы мне устанавливать .normal
и .selected
UIControlState
изображения внутри раскадровки для их исходного режима рендеринга , но внутри файла Swift не должно быть никаких строковых литералов относительно имен изображений.
По сути, внутри вашего кода вы получите изображение, которое вы установили внутри раскадровки для .normal
состояния, и повторно отобразите его как .alwaysOriginal
(То же самое для .selected
состояния), затем вы установите это изображение (которое теперь отображается как оригинальное и не будет зависеть от оттенок) для соответствующего состояния ( .normal
и .selected
) вашего UIButton
.
Вот:
// Get your .normal image (you set via your storyboard) and render it as original
let unselectedImage = yourButton.image(for: .normal)?.withRenderingMode(.alwaysOriginal)
// Set your normal image but this time rendered as original
yourButton.setImage(unselectedImage, for: .normal)
// Same for selected state
let selectedImage = yourButton.image(for: .selected)?.withRenderingMode(.alwaysOriginal)
yourButton.setImage(selectedImage, for: .selected)
Таким образом, вы можете установить состояние изображения кнопки, и если имя изображения изменится, это не повлияет на ваш код.