UIKitCatalog/UIKitCatalog/SwitchViewController.swift
2020-10-08 18:55:35 -08:00

112 lines
3.6 KiB
Swift
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
See LICENSE folder for this samples licensing information.
Abstract:
A view controller that demonstrates how to use `UISwitch`.
*/
import UIKit
class SwitchViewController: UITableViewController {
// MARK: - Properties
@IBOutlet weak var defaultSwitch: UISwitch!
@IBOutlet weak var checkBoxSwitch: UISwitch!
@IBOutlet weak var tintedSwitch: UISwitch!
// MARK: - View Life Cycle
override func viewDidLoad() {
super.viewDidLoad()
configureDefaultSwitch()
configureCheckboxSwitch() // macOS only.
configureTintedSwitch() // iOS only.
}
// MARK: - Configuration
func configureDefaultSwitch() {
defaultSwitch.setOn(true, animated: false)
defaultSwitch.preferredStyle = .sliding
defaultSwitch.addTarget(self, action: #selector(SwitchViewController.switchValueDidChange(_:)), for: .valueChanged)
}
func configureCheckboxSwitch() {
checkBoxSwitch.setOn(true, animated: false)
checkBoxSwitch.addTarget(self, action: #selector(SwitchViewController.switchValueDidChange(_:)), for: .valueChanged)
// On the Mac, make sure this control take on the apperance of a checkbox with a title.
if traitCollection.userInterfaceIdiom == .mac {
checkBoxSwitch.preferredStyle = .checkbox
// Title on a UISwitch is only supported when running Catalyst apps in the Mac Idiom.
checkBoxSwitch.title = NSLocalizedString("SwitchTitle", comment: "")
}
}
func configureTintedSwitch() {
tintedSwitch.tintColor = UIColor.systemBlue
tintedSwitch.onTintColor = UIColor.systemGreen
tintedSwitch.thumbTintColor = UIColor.systemPurple
tintedSwitch.addTarget(self, action: #selector(SwitchViewController.switchValueDidChange(_:)), for: .valueChanged)
// Note that on the Mac, tinted switches are not possible, so we hide the tinted one.
if traitCollection.userInterfaceIdiom == .mac {
tintedSwitch.isHidden = true
}
}
// MARK: - UITableViewDataSource
override func numberOfSections(in tableView: UITableView) -> Int {
return 3
}
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
#if targetEnvironment(macCatalyst)
// Don't show tinted switch control for macOS, it does not exist.
if section == 2 {
return ""
} else {
return super.tableView(tableView, titleForHeaderInSection: section)
}
#else
// Don't show checkbox switch control for iOS, it does not exist.
if section == 1 {
return ""
} else {
return super.tableView(tableView, titleForHeaderInSection: section)
}
#endif
}
override func tableView(_ tableView: UITableView,
heightForRowAt indexPath: IndexPath) -> CGFloat {
#if targetEnvironment(macCatalyst)
// Don't show tinted switch control for macOS, it does not exist.
if indexPath.section == 2 {
return 0
} else {
return super.tableView(tableView, heightForRowAt: indexPath)
}
#else
// Don't show checkbox switch control for iOS, it does not exist.
if indexPath.section == 1 {
return 0
} else {
return super.tableView(tableView, heightForRowAt: indexPath)
}
#endif
}
// MARK: - Actions
@objc
func switchValueDidChange(_ aSwitch: UISwitch) {
print("A switch changed its value: \(aSwitch).")
}
}