diff options
author | Nicholas Tay <nick@windblume.net> | 2022-03-21 19:36:43 +1100 |
---|---|---|
committer | Nicholas Tay <nick@windblume.net> | 2022-03-21 19:36:43 +1100 |
commit | d776ba9c6ec94d6622e1f759c112fd2334b7fb8b (patch) | |
tree | f9ebfceaeb403a2a08cb0471efebe085be45745f /foray | |
parent | 54600245b35b2591b5ca19e39c80b8d9d0ae5f9e (diff) | |
download | forayios-d776ba9c6ec94d6622e1f759c112fd2334b7fb8b.tar.gz forayios-d776ba9c6ec94d6622e1f759c112fd2334b7fb8b.tar.bz2 forayios-d776ba9c6ec94d6622e1f759c112fd2334b7fb8b.zip |
Loading overlay to custom class + add to coordinator
Just an idea I had, since it was quite messy that a TableViewController
was handling all that. Instead now it should be reusable through the
ForayCoordinator itself, which means e.g. on details screen, we can show
the loading overlay.
Diffstat (limited to 'foray')
-rw-r--r-- | foray/ForayCoordinator.swift | 10 | ||||
-rw-r--r-- | foray/ForayLoadingOverlay.swift | 37 | ||||
-rw-r--r-- | foray/ForayTableViewController.swift | 12 |
3 files changed, 49 insertions, 10 deletions
diff --git a/foray/ForayCoordinator.swift b/foray/ForayCoordinator.swift index 8fe6656..6497ec0 100644 --- a/foray/ForayCoordinator.swift +++ b/foray/ForayCoordinator.swift @@ -15,9 +15,11 @@ protocol ForayCoordinated: UIViewController { class ForayCoordinator: Coordinator { var childCoordinators = [Coordinator]() var navigationController: UINavigationController + var loadingOverlay: ForayLoadingOverlay init(navigationController: UINavigationController) { self.navigationController = navigationController + self.loadingOverlay = ForayLoadingOverlay(viewController: navigationController) } private func push(vc: ForayCoordinated, animated: Bool = true) { @@ -50,4 +52,12 @@ class ForayCoordinator: Coordinator { detailViewController.setDetails(name: item.name, description: description, image: image) push(vc: detailViewController) } + + func showLoading() { + loadingOverlay.show() + } + + func hideLoading() { + loadingOverlay.hide() + } } diff --git a/foray/ForayLoadingOverlay.swift b/foray/ForayLoadingOverlay.swift new file mode 100644 index 0000000..1aa6260 --- /dev/null +++ b/foray/ForayLoadingOverlay.swift @@ -0,0 +1,37 @@ +// +// ForayLoadingOverlay.swift +// foray +// +// Created by Nicholas Tay on 21/3/2022. +// + +import UIKit + +class ForayLoadingOverlay { + + var viewController: UIViewController + + let loadingIndicator: UIActivityIndicatorView = { + let aiv = UIActivityIndicatorView(frame: CGRect(x: 10, y: 5, width: 50, height: 50)) + aiv.hidesWhenStopped = true + aiv.style = UIActivityIndicatorView.Style.medium + aiv.startAnimating() + return aiv + }() + + let alert: UIAlertController = UIAlertController(title: nil, message: "Grabbing data...", preferredStyle: .alert) + + init(viewController: UIViewController) { + self.viewController = viewController + alert.view.addSubview(self.loadingIndicator) + } + + func show() { + viewController.present(alert, animated: true) + } + + func hide() { + viewController.dismiss(animated: false) + } + +} diff --git a/foray/ForayTableViewController.swift b/foray/ForayTableViewController.swift index 827d4ea..2b7ba65 100644 --- a/foray/ForayTableViewController.swift +++ b/foray/ForayTableViewController.swift @@ -33,18 +33,9 @@ class ForayTableViewController: UITableViewController, ForayCoordinated { tableView.register(ForayNewTableViewCell.self, forCellReuseIdentifier: "ForayNewTableViewCell") // Not sure if this is the right way to go about this... - let alert = UIAlertController(title: nil, message: "Grabbing data...", preferredStyle: .alert) - let loadingIndicator = UIActivityIndicatorView(frame: CGRect(x: 10, y: 5, width: 50, height: 50)) - loadingIndicator.hidesWhenStopped = true - loadingIndicator.style = UIActivityIndicatorView.Style.medium - loadingIndicator.startAnimating(); - alert.view.addSubview(loadingIndicator) - present(alert, animated: true, completion: nil) - + coordinator?.showLoading() reloadApiData() - dismiss(animated: false, completion: nil) - self.refreshControl = UIRefreshControl() self.refreshControl?.addTarget(self, action: #selector(doRefresh), for: UIControl.Event.valueChanged) } @@ -71,6 +62,7 @@ class ForayTableViewController: UITableViewController, ForayCoordinated { self.tableView.reloadData() self.refreshControl?.endRefreshing() + self.coordinator?.hideLoading() }) } |