I'm getting some success by using an old, old web trick.
I've created a couple of image assets in images.xcassets, PNG files, both 1px by 1px. One is the normal colour, the other is the background colour.
I'm going from pure black to pure white, so:
In the storyboard I select the button. In the 'Attributes inspector' (right-hand panel, 4th icon across) I change the type to 'custom', change the 'state config' to 'highlight', then 'background' to 'whitePixel' (or whatever you called it) and 'Text Color' to 'black color'.
Now I change the 'state config' to 'Default', the 'background' to 'blackPixel' (or whatever) and the 'Text Color' to 'white color'.
I guess you can use these pixels whenever you need to apply a colour when you only have access to images in the Storyboard editor.
This does increase the number of image assets, but reduces the required code hugely. Which pleases me.