// // SettingTableViewController.swift import UIKit protocol SettingViewControllerDelegate: class { func controllerDidChangeDateMode(controller: SettingTableViewController) func controllerDidChangeTemperatureMode(controller: SettingTableViewController) } class SettingTableViewController: UITableViewController { weak var changeDelegate: SettingViewControllerDelegate? override func viewDidLoad() { super.viewDidLoad() tableView.rowHeight = 44 } } extension SettingTableViewController { private enum Section: Int { case date case temperature var numberOfRows: Int { return 2 } static var count: Int { return Section.temperature.rawValue + 1 } } override func numberOfSections(in tableView: UITableView) -> Int { return Section.count } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { guard let section = Section(rawValue: section) else { fatalError("未知section索引") } return section.numberOfRows } override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { if section == 0 { return "Date format" } return "Temperature unit" } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { guard let cell = tableView.dequeueReusableCell(withIdentifier: SettingTableViewCell.reuseIdentifier, for: indexPath) as? SettingTableViewCell else { fatalError("未知的tableViewCell") } guard let section = Section(rawValue: indexPath.section) else { fatalError("未知的section") } switch section { case .date: cell.label.text = (indexPath.row == 0) ? "Fri, 01 December" : "F, 12/01" let timeMode = UserDefaults.dateMode() if indexPath.row == timeMode.rawValue { cell.accessoryType = .checkmark } else { cell.accessoryType = .none } case .temperature: cell.label.text = (indexPath.row == 0) ? "Celcius" : "Fahrenheit" let temperatureMode = UserDefaults.temperatureMode() if indexPath.row == temperatureMode.rawValue { cell.accessoryType = .checkmark } else { cell.accessoryType = .none } } return cell } override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { tableView.deselectRow(at: indexPath, animated: true) guard let section = Section(rawValue: indexPath.section) else { fatalError("未知的section索引") } switch section { case .date: let dateMode = UserDefaults.dateMode() guard indexPath.row != dateMode.rawValue else { return } if let newMode = DateMode(rawValue: indexPath.row) { UserDefaults.setDateMode(to: newMode) } changeDelegate?.controllerDidChangeDateMode(controller: self) case .temperature: let temperatureMode = UserDefaults.temperatureMode() guard indexPath.row != temperatureMode.rawValue else { return } if let newMode = TemperatureMode(rawValue: indexPath.row) { UserDefaults.setTemperatureMode(to: newMode) } changeDelegate?.controllerDidChangeTemperatureMode(controller: self) } let sections = IndexSet(integer: indexPath.section) tableView.reloadSections(sections, with: .none) } }
提供一种思路
代码来自泊学
--EOF--
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于