Guest User

Untitled

a guest
Jun 21st, 2018
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.05 KB | None | 0 0
  1. //
  2. // MasterMenuController.swift
  3. // HeroTechUIDemo
  4. //
  5. // Created by Brian Drelling on 6/19/18.
  6. // Copyright © 2018 SpotHero. All rights reserved.
  7. //
  8.  
  9. import Foundation
  10. import UIKit
  11.  
  12. class MasterMenuController: UITableViewController {
  13. var sections = MenuSection.allCases
  14.  
  15. // MARK: - Methods
  16.  
  17. override func numberOfSections(in tableView: UITableView) -> Int {
  18. return sections.count
  19. }
  20.  
  21. override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  22. tableView.deselectRow(at: indexPath, animated: true)
  23.  
  24. let item = sections[indexPath.section].rows[indexPath.row]
  25.  
  26. switch item {
  27. case .alerts(.first):
  28. return
  29. case .alerts(.second):
  30. return
  31. case .modals(.first):
  32. return
  33. }
  34. }
  35.  
  36. override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  37. return sections[section].rows.count
  38. }
  39.  
  40. override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  41. let cell = tableView.dequeueReusableCell(withIdentifier: "MenuCell", for: indexPath)
  42.  
  43. cell.textLabel?.text = sections[indexPath.section].rows[indexPath.row].title
  44.  
  45. return cell
  46. }
  47.  
  48. override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
  49. return sections[section].title
  50. }
  51. }
  52.  
  53. // MARK: - Menu Configuration
  54.  
  55. extension MasterMenuController {
  56. // Basic Menu Structure
  57.  
  58. enum MenuSection: String, MenuReadable {
  59. case alerts = "Alerts"
  60. case modals = "Modals"
  61.  
  62. static let allCases: [MenuSection] = [.alerts, .modals]
  63.  
  64. var rows: [MenuItem] {
  65. return MenuItem.getItems(forSection: self)
  66. }
  67. }
  68.  
  69. enum AlertsMenuRow: String, MenuReadable {
  70. case first = "First"
  71. case second = "Second"
  72.  
  73. static let allCases: [AlertsMenuRow] = [.first]
  74. }
  75.  
  76. enum ModalsMenuRow: String, MenuReadable {
  77. case first = "First"
  78.  
  79. static let allCases: [ModalsMenuRow] = [.first]
  80. }
  81.  
  82. // Allows friendly switch within didSelectRow function above
  83. // Switch in getItems will break if new items are added to MenuSection, alerting developer to update the MenuItem enum
  84. enum MenuItem {
  85. case alerts(AlertsMenuRow)
  86. case modals(ModalsMenuRow)
  87.  
  88. var title: String {
  89. switch self {
  90. case .alerts(let row):
  91. return row.rawValue
  92. case .modals(let row):
  93. return row.rawValue
  94. }
  95. }
  96.  
  97. static func getItems(forSection section: MenuSection) -> [MenuItem] {
  98. switch section {
  99. case .alerts:
  100. return AlertsMenuRow.allCases.map({ .alerts($0) })
  101. case .modals:
  102. return ModalsMenuRow.allCases.map({ .modals($0) })
  103. }
  104. }
  105. }
  106. }
  107.  
  108. // MARK: - Convenience Protocols
  109.  
  110. protocol MenuReadable {
  111. var rawValue: String { get }
  112. }
  113.  
  114. extension MenuReadable {
  115. var title: String {
  116. return self.rawValue
  117. }
  118. }
Add Comment
Please, Sign In to add comment