I wouldn't have a single image for your scene that has the buttons included on it. There is no room for scalability like that. I would create those buttons as a subclass of SKSpriteNode and add them to the scene as objects. That way if you move around the button you don't have to redo your background image. @Konrad.bajtyngier Is on the right path with his implementation, and I use something very similar in all of my games (it becomes an indispensable object that gets copied from game to game). His implementation uses closures () -> () to carry out the actions, there is another option in you can use in your sub class as well.
in your subclass add a delegate
protocol ButtonDelegate: NSObjectProtocol {
func buttonWasPressed(sender: Key)
}
weak var buttonDelegate: ButtonDelegate!
and when you create your button just add they scene as the delegate of the button.
button.buttonDelegate = self
and then in the scene add the buttonWasPressed func. This way you'll will know what button was pressed and handle it accordingly and not have to worry about your objects getting retained by using closures.
I don't feel one method is better than the other, but you should strongly consider sub classing your button, and remove the button backgrounds from your background image.
please see my answer and code here for full details
Make touch-area for SKLabelNode bigger for small characters