111 lines
3.4 KiB
Swift
111 lines
3.4 KiB
Swift
//
|
|
// SampleViewController.swift
|
|
// PanModal
|
|
//
|
|
// Created by Stephen Sowole on 10/9/18.
|
|
// Copyright © 2018 PanModal. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
class SampleViewController: UITableViewController {
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
setupView()
|
|
}
|
|
|
|
private func setupView() {
|
|
title = "PanModal"
|
|
|
|
navigationController?.navigationBar.titleTextAttributes = [
|
|
.font: UIFont(name: "Lato-Bold", size: 17)!
|
|
]
|
|
|
|
tableView.register(UITableViewCell.self, forCellReuseIdentifier: String(describing: UITableViewCell.self))
|
|
tableView.tableFooterView = UIView()
|
|
tableView.separatorInset = .zero
|
|
}
|
|
|
|
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
|
|
return 60.0
|
|
}
|
|
|
|
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
|
return RowType.allCases.count
|
|
}
|
|
|
|
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
|
let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: UITableViewCell.self), for: indexPath)
|
|
|
|
guard let rowType = RowType(rawValue: indexPath.row) else {
|
|
return cell
|
|
}
|
|
cell.textLabel?.textAlignment = .center
|
|
cell.textLabel?.text = rowType.presentable.string
|
|
cell.textLabel?.font = UIFont(name: "Lato-Regular", size: 17.0)
|
|
return cell
|
|
}
|
|
|
|
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
|
tableView.deselectRow(at: indexPath, animated: true)
|
|
|
|
guard let rowType = RowType(rawValue: indexPath.row) else {
|
|
return
|
|
}
|
|
presentPanModal(rowType.presentable.rowVC)
|
|
}
|
|
}
|
|
|
|
protocol RowPresentable {
|
|
var string: String { get }
|
|
var rowVC: PanModalPresentable.LayoutType { get }
|
|
}
|
|
|
|
private extension SampleViewController {
|
|
|
|
enum RowType: Int, CaseIterable {
|
|
case basic
|
|
case transparent
|
|
case userGroups
|
|
case stacked
|
|
case navController
|
|
|
|
|
|
var presentable: RowPresentable {
|
|
switch self {
|
|
case .basic: return Basic()
|
|
case .transparent: return Transparent()
|
|
case .userGroups: return UserGroup()
|
|
case .stacked: return Stacked()
|
|
case .navController: return Navigation()
|
|
}
|
|
}
|
|
|
|
struct Basic: RowPresentable {
|
|
var string: String { return "Basic" }
|
|
var rowVC: PanModalPresentable.LayoutType { return BasicViewController() }
|
|
}
|
|
|
|
struct Transparent: RowPresentable {
|
|
var string: String { return "Alert" }
|
|
var rowVC: PanModalPresentable.LayoutType { return AlertViewController() }
|
|
}
|
|
|
|
struct UserGroup: RowPresentable {
|
|
var string: String { return "User Groups" }
|
|
var rowVC: PanModalPresentable.LayoutType { return UserGroupViewController() }
|
|
}
|
|
|
|
struct Navigation: RowPresentable {
|
|
var string: String { return "User Groups (NavigationController)" }
|
|
var rowVC: PanModalPresentable.LayoutType { return NavigationController() }
|
|
}
|
|
|
|
struct Stacked: RowPresentable {
|
|
var string: String { return "User Groups (Stacked)" }
|
|
var rowVC: PanModalPresentable.LayoutType { return UserGroupStackedViewController() }
|
|
}
|
|
}
|
|
}
|