Created
January 6, 2021 15:49
-
-
Save exorcyze/701721524a72029805440ccb27cda0d8 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// TestDetailController | |
// Created / Copyright © : Mike Johnson, 2021 | |
// | |
import Foundation | |
import UIKit | |
// MARK: - Lifecycle Methods | |
class TestDetailController : UIViewController { | |
private let mytable = UITableView( frame: .zero, style: .plain ) | |
private var data = [RowModel]() | |
override func viewDidLoad() { | |
super.viewDidLoad() | |
setupInterface() | |
setupLayout() | |
setupData() | |
} | |
} | |
// MARK: - Public Methods | |
extension TestDetailController { | |
} | |
// MARK: - Private Methods | |
private extension TestDetailController { | |
func setupInterface() { | |
title = "Login w/ Biometrics" | |
mytable.register( UITableViewCell.self, forCellReuseIdentifier: "cell" ) | |
mytable.dataSource = self | |
mytable.delegate = self | |
mytable.tableFooterView = UIView() | |
view.addSubview( mytable ) | |
} | |
func setupLayout() { | |
mytable.constrainWidth() | |
mytable.constrainHeight() | |
} | |
func setupData() { | |
data = [ | |
RowModel(key: "logout", title: "Log Out", detail: "Result: Success", function: onBlank), | |
RowModel(key: "enableBio", title: "Enable Biometrics", detail: "Result: Enabled", function: onBlank), | |
RowModel(key: "login", title: "Log In", detail: "", function: onBlank), | |
] | |
mytable.reloadData() | |
} | |
func onBlank( _ model: RowModel ) { | |
log( "Selected \(model.key)", type: .base ) | |
} | |
} | |
// MARK: - UICollectionView | |
extension TestDetailController: UITableViewDataSource, UITableViewDelegate { | |
func numberOfSections(in tableView: UITableView) -> Int { | |
return 1 | |
} | |
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | |
return data.count | |
} | |
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | |
let cell = UITableViewCell( style: .subtitle, reuseIdentifier: "cell" ) | |
let myitem = data[ indexPath.row ] | |
cell.textLabel?.text = myitem.title | |
cell.detailTextLabel?.text = myitem.detail | |
cell.detailTextLabel?.textColor = .gray | |
cell.accessoryType = .disclosureIndicator | |
return cell | |
} | |
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { | |
return 60 | |
} | |
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { | |
let myitem = data[ indexPath.row ] | |
myitem.function( myitem ) | |
tableView.deselectRow( at: indexPath, animated: true ) | |
} | |
} | |
// MARK: - Preview | |
#if canImport(SwiftUI) && DEBUG | |
private extension TestDetailController { | |
static var mock: UINavigationController { | |
let view = TestDetailController() | |
let nav = UINavigationController(rootViewController: view) | |
return nav | |
} | |
} | |
import SwiftUI | |
@available(iOS 13.0, *) | |
struct TestDetailController_Preview: PreviewProvider { | |
static var previews: some View { | |
TestDetailController.mock.asPreview() | |
} | |
} | |
#endif | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// TestHarnessController | |
// Created / Copyright © : Mike Johnson, 2021 | |
// | |
import Foundation | |
import UIKit | |
// MARK: - Models | |
struct RowModel { | |
let key: String | |
let title: String | |
let detail: String | |
let function: ((RowModel) -> Void) | |
} | |
struct SectionModel { | |
let title: String | |
let items: [RowModel] | |
} | |
// MARK: - Lifecycle Methods | |
class TestHarnessController : UIViewController { | |
private let mytable = UITableView( frame: .zero, style: .grouped ) | |
private var data = [SectionModel]() | |
override func viewDidLoad() { | |
super.viewDidLoad() | |
setupInterface() | |
setupLayout() | |
setupData() | |
} | |
} | |
// MARK: - Public Methods | |
extension TestHarnessController { | |
} | |
// MARK: - Private Methods | |
private extension TestHarnessController { | |
func setupInterface() { | |
title = "Test App" | |
mytable.register( UITableViewCell.self, forCellReuseIdentifier: "cell" ) | |
mytable.dataSource = self | |
mytable.delegate = self | |
view.addSubview( mytable ) | |
} | |
func setupLayout() { | |
mytable.constrainWidth() | |
mytable.constrainHeight() | |
} | |
func setupData() { | |
data = [ | |
SectionModel(title: "Settings", items: [ | |
RowModel(key: "environment", title: "Environment", detail: "Staging", function: onBlank), | |
RowModel(key: "features", title: "FeatureFlags", detail: "", function: onBlank), | |
]), | |
SectionModel(title: "Functions", items: [ | |
RowModel(key: "logout", title: "Log Out", detail: "", function: onBlank), | |
RowModel(key: "login", title: "Log In", detail: "", function: onBlank), | |
RowModel(key: "enableBio", title: "Enable Biometrics", detail: "", function: onBlank), | |
RowModel(key: "enableLLS", title: "Enable LLS", detail: "", function: onBlank), | |
]), | |
SectionModel(title: "Use Cases", items: [ | |
RowModel(key: "login", title: "Standard Login", detail: "", function: onBlank), | |
RowModel(key: "login.bio", title: "Login w/ Biometrics", detail: "", function: onBlank), | |
]), | |
] | |
mytable.reloadData() | |
} | |
func onBlank( _ model: RowModel ) { | |
log( "Selected \(model.key)", type: .base ) | |
navigationController?.pushViewController( TestDetailController(), animated: true ) | |
} | |
} | |
// MARK: - UICollectionView | |
extension TestHarnessController: UITableViewDataSource, UITableViewDelegate { | |
func numberOfSections(in tableView: UITableView) -> Int { | |
return data.count | |
} | |
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { | |
return data[section].title | |
} | |
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | |
return data[section].items.count | |
} | |
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | |
let cell = UITableViewCell( style: .subtitle, reuseIdentifier: "cell" ) | |
let myitem = data[ indexPath.section ].items[ indexPath.row ] | |
cell.textLabel?.text = myitem.title | |
cell.detailTextLabel?.text = myitem.detail | |
cell.detailTextLabel?.textColor = .gray | |
cell.accessoryType = .disclosureIndicator | |
return cell | |
} | |
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { | |
return 60 | |
} | |
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { | |
let myitem = data[ indexPath.section ].items[ indexPath.row ] | |
myitem.function( myitem ) | |
tableView.deselectRow( at: indexPath, animated: true ) | |
} | |
} | |
// MARK: - Preview | |
#if canImport(SwiftUI) && DEBUG | |
private extension TestHarnessController { | |
static var mock: UINavigationController { | |
let view = TestHarnessController() | |
let nav = UINavigationController(rootViewController: view) | |
return nav | |
} | |
} | |
import SwiftUI | |
@available(iOS 13.0, *) | |
struct TestHarnessController_Preview: PreviewProvider { | |
static var previews: some View { | |
TestHarnessController.mock.asPreview() | |
} | |
} | |
#endif | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment