# 1. Toggle UIButton
With Swift 3, UIButton has a setTitle(_:for:) method. setTitle(_:for:) has the following declaration:
func setTitle(_ title: String?, for state: UIControlState)
Sets the header to use in the specified state.
The following playground code shows how to use setTitle(_:for:) to switch the button title according to its state:
import PlaygroundSupport import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = UIColor.white let button = UIButton(type: UIButtonType.system) button.addTarget(self, action: #selector(toggle(sender:)), for: UIControlEvents.touchUpInside) // Set button states button.setTitle("Start", for: UIControlState.normal) button.setTitle("Pause", for: UIControlState.selected) // set layout view.addSubview(button) button.translatesAutoresizingMaskIntoConstraints = false let horizontalConstraint = button.centerXAnchor.constraint(equalTo: view.centerXAnchor) let verticalConstraint = button.centerYAnchor.constraint(equalTo: view.centerYAnchor) NSLayoutConstraint.activate([horizontalConstraint, verticalConstraint]) } /// trigger action when button is tapped func toggle(sender: UIButton) { sender.isSelected = !sender.isSelected print("Button state: \(sender.isSelected)") } } let vc = ViewController() PlaygroundPage.current.liveView = vc
Preview the view controller in the playground assistant editor using View > Assistant Editor > Show Assistant Editor
# 2. Toggle UIButton Image
UIButton has a setImage(_:for:) method. setImage(_:for:) has the following declaration:
func setImage(_ image: UIImage?, for state: UIControlState)
Sets the image to use in the specified state.
The following pad code shows how to use setImage(_:for:) to toggle the button title according to its state:
import PlaygroundSupport import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = UIColor.white let button = UIButton() button.addTarget(self, action: #selector(toggle(sender:)), for: UIControlEvents.touchUpInside) // Set button states button.setImage(UIImage(named: "on.png"), for: UIControlState.normal) button.setImage(UIImage(named: "off.png"), for: UIControlState.selected) // set layout view.addSubview(button) button.translatesAutoresizingMaskIntoConstraints = false let horizontalConstraint = button.centerXAnchor.constraint(equalTo: view.centerXAnchor) let verticalConstraint = button.centerYAnchor.constraint(equalTo: view.centerYAnchor) let heightConstraint = button.heightAnchor.constraint(equalToConstant: 100) let widthConstraint = button.widthAnchor.constraint(equalToConstant: 100) NSLayoutConstraint.activate([horizontalConstraint, verticalConstraint, heightConstraint, widthConstraint]) } /// trigger action when button is tapped func toggle(sender: UIButton) { sender.isSelected = !sender.isSelected print("Button state: \(sender.isSelected)") } } let vc = ViewController() PlaygroundPage.current.liveView = vc
Preview the view controller in the playground assistant editor using View > Assistant Editor > Show Assistant Editor