Skip to content

Instantly share code, notes, and snippets.

@zafarivaev
Last active January 14, 2020 17:22
Show Gist options
  • Select an option

  • Save zafarivaev/df225a8fa9fbe3a0687900fab495dfb2 to your computer and use it in GitHub Desktop.

Select an option

Save zafarivaev/df225a8fa9fbe3a0687900fab495dfb2 to your computer and use it in GitHub Desktop.
import UIKit
import PKHUD
import RxSwift
import RxCocoa
import RxDataSources
class HolidaysViewController: UIViewController {
// MARK: - Lifecycle Methods
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
setupNavItem()
bindTableView()
bindNavItem()
bindHUD()
bindVisibilityState()
viewModel.fetchHolidays{ (errorMessage) in
self.showMessage(errorMessage)
}
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
setupNavBar()
}
// MARK: - Properties
let disposeBag = DisposeBag()
var viewModel: HolidaysViewModel!
....
}
// MARK: - Binding
extension HolidaysViewController {
func bindTableView() {
viewModel.holidays
.bind(to: tableView.rx.items(cellIdentifier: "HolidayTableViewCell", cellType: HolidayTableViewCell.self)) { index, viewModel, cell in
cell.viewModel = viewModel
}
.disposed(by: disposeBag)
tableView.rx.modelSelected(HolidayViewModel.self)
.bind(to: viewModel.selectedHoliday)
.disposed(by: disposeBag)
tableView.rx.itemSelected
.subscribe(onNext: { (indexPath) in
self.tableView.deselectRow(at: indexPath, animated: true)
})
.disposed(by: disposeBag)
}
func bindHUD() {
viewModel.isLoading
.subscribe(onNext: { [weak self] isLoading in
isLoading ? self?.showProgress() : self?.hideProgress()
})
.disposed(by: disposeBag)
}
func bindNavItem() {
chooseCountryItem.rx.tap
.bind(to: viewModel.chooseCountry)
.disposed(by: disposeBag)
viewModel.selectedCountry
.subscribe(onNext: { (country) in
self.chooseCountryItem.title = country
})
.disposed(by: disposeBag)
}
func bindVisibilityState() {
viewModel.selectedCountry
.subscribe(onNext: { _ in
self.tableView.isHidden = false
self.chooseCountryLabel.isHidden = true
})
.disposed(by: disposeBag)
}
}
// MARK: - UI Setup
extension HolidaysViewController {
func setupUI() {
overrideUserInterfaceStyle = .light
self.view.backgroundColor = .white
.....
}
func setupNavItem() {
self.navigationItem.title = "Holidays"
self.navigationItem.rightBarButtonItem = chooseCountryItem
}
func setupNavBar() {
self.navigationController?
.navigationBar
.tintColor = .white
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment