refactor: Recreate Menu controller in Swift and use updated website address
- Remove old controller - Create cell classes for menu cells - Update website url with new one
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
//
|
||||
// MenuViewController.swift
|
||||
// Earthquake Network
|
||||
//
|
||||
// Created by Busi Andrea on 27/07/2020.
|
||||
// Copyright © 2020 Earthquake Network. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import SafariServices
|
||||
|
||||
|
||||
class MenuViewController: UITableViewController {
|
||||
|
||||
enum MenuItem: CaseIterable {
|
||||
case header
|
||||
case settings
|
||||
case informations
|
||||
case faq
|
||||
case disclaimer
|
||||
case author
|
||||
case privacy
|
||||
|
||||
var title: String {
|
||||
switch self {
|
||||
case .header: return ""
|
||||
case .settings: return NSLocalizedString("Impostazioni", comment: "voce menu")
|
||||
case .informations: return NSLocalizedString("Informazioni", comment: "voce menu")
|
||||
case .faq: return NSLocalizedString("F.A.Q.", comment: "voce menu")
|
||||
case .disclaimer: return NSLocalizedString("Disclaimer", comment: "voce menu")
|
||||
case .author: return NSLocalizedString("Autore", comment: "voce menu")
|
||||
case .privacy: return NSLocalizedString("Privacy", comment: "voce menu")
|
||||
}
|
||||
}
|
||||
|
||||
var icon: String? {
|
||||
switch self {
|
||||
case .header: return nil
|
||||
case .settings: return "ic_settings_black_24dp"
|
||||
case .informations: return "ic_info_outline_black_24dp"
|
||||
case .faq: return "ic_help_outline_black_24dp"
|
||||
case .disclaimer: return "ic_star_border_black_24dp"
|
||||
case .author: return "ic_verified_user_black_24dp"
|
||||
case .privacy: return "ic_person_black_24dp"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private let items = MenuItem.allCases
|
||||
private static let CellIdentifierHeader = "HeaderCell"
|
||||
private static let CellIdentifierItem = "MenuItemCell"
|
||||
|
||||
// MARK: - View Lifecycle
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
}
|
||||
|
||||
// MARK: - Table view data source
|
||||
|
||||
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||
items.count
|
||||
}
|
||||
|
||||
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
|
||||
let item = items[indexPath.row]
|
||||
if item == .header {
|
||||
return 160
|
||||
}
|
||||
return 60
|
||||
}
|
||||
|
||||
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||||
let item = items[indexPath.row]
|
||||
if item == .header {
|
||||
let cell = tableView.dequeueReusableCell(withIdentifier: Self.CellIdentifierHeader, for: indexPath) as! MenuHeaderTableViewCell
|
||||
cell.updateUI()
|
||||
return cell
|
||||
}
|
||||
|
||||
let cell = tableView.dequeueReusableCell(withIdentifier: Self.CellIdentifierItem, for: indexPath) as! MenuItemTableViewCell
|
||||
cell.item = item
|
||||
return cell
|
||||
}
|
||||
|
||||
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
||||
self.revealViewController()?.revealToggle(animated: true)
|
||||
|
||||
let item = items[indexPath.row]
|
||||
switch item {
|
||||
case .header:
|
||||
break
|
||||
case .settings:
|
||||
NotificationCenter.default.post(name: NSNotification.Name(rawValue: NOTIFICHE_SISMI), object: nil)
|
||||
default:
|
||||
// open url if available
|
||||
if let url = externalUrl(for: item) {
|
||||
let controller = SFSafariViewController(url: url)
|
||||
present(controller, animated: true, completion: nil)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Private
|
||||
|
||||
private func externalUrl(for item: MenuItem) -> URL? {
|
||||
let baseUrl = EQNWebsiteAddress
|
||||
switch item {
|
||||
case .informations: return URL(string: "\(baseUrl)")
|
||||
case .faq: return URL(string: "\(baseUrl)/f-a-q/")
|
||||
case .disclaimer: return URL(string: "\(baseUrl)/terms-conditions/")
|
||||
case .author: return URL(string: "\(baseUrl)/contact/")
|
||||
case .privacy: return URL(string: "\(baseUrl)/privacy/")
|
||||
default: return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user