InKwon James Kim
5 years ago
1 changed files with 175 additions and 0 deletions
@ -0,0 +1,175 @@ |
|||||
|
// |
||||
|
// NewRegisterStep1ViewController.swift |
||||
|
// GME Remit |
||||
|
// |
||||
|
// Created by InKwon James Kim on 2019/12/02. |
||||
|
//Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved. |
||||
|
// |
||||
|
|
||||
|
import UIKit |
||||
|
import RxSwift |
||||
|
import RxCocoa |
||||
|
import CoreLocation |
||||
|
|
||||
|
class NewRegisterStep1ViewController: UIViewController { |
||||
|
|
||||
|
// MARK: Properties |
||||
|
var presenter: NewRegisterStep1Presenter! |
||||
|
|
||||
|
private let disposeBag = DisposeBag() |
||||
|
private let sendLocation = PublishSubject<CLLocation>() |
||||
|
private let locationManager = CLLocationManager() |
||||
|
// MARK: Computed Properties |
||||
|
|
||||
|
// MARK: IBOutlets |
||||
|
@IBOutlet private weak var userNameTextField: ValidationTextField! |
||||
|
@IBOutlet private weak var genderTextField: ValidationTextField! |
||||
|
@IBOutlet private weak var dobTextField: ValidationTextField! |
||||
|
@IBOutlet private weak var emailTextField: ValidationTextField! |
||||
|
@IBOutlet private weak var mobileTextField: ValidationTextField! |
||||
|
@IBOutlet private weak var nativeCountryTextField: ValidationTextField! |
||||
|
@IBOutlet private weak var addressTextField: ValidationTextField! |
||||
|
|
||||
|
@IBOutlet private weak var gpsButton: UIButton! |
||||
|
|
||||
|
@IBOutlet private weak var idTextField: ValidationTextField! |
||||
|
@IBOutlet private weak var passwordTextField: ValidationTextField! |
||||
|
|
||||
|
@IBOutlet private weak var continueButton: UIButton! |
||||
|
|
||||
|
// MARK: VC's Life cycle |
||||
|
override func viewDidLoad() { |
||||
|
super.viewDidLoad() |
||||
|
setup() |
||||
|
} |
||||
|
|
||||
|
override func viewWillAppear(_ animated: Bool) { |
||||
|
super.viewWillAppear(animated) |
||||
|
} |
||||
|
|
||||
|
override func viewWillDisappear(_ animated: Bool) { |
||||
|
super.viewWillDisappear(animated) |
||||
|
} |
||||
|
|
||||
|
// willMove -> It appears on the parent screen. |
||||
|
override func willMove(toParent parent: UIViewController?) { |
||||
|
print(#function) |
||||
|
if let `parent` = parent as UIViewController? { |
||||
|
print(parent) |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// It appears on the parent screen. -> didMove |
||||
|
override func didMove(toParent parent: UIViewController?) { |
||||
|
print(#function) |
||||
|
if let `parent` = parent as UIViewController? { |
||||
|
print(parent) |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// MARK: IBActions |
||||
|
@IBAction func touchGPSButton(_ sender: UIButton) { |
||||
|
locationManager.requestAlwaysAuthorization() |
||||
|
locationManager.requestWhenInUseAuthorization() |
||||
|
|
||||
|
if CLLocationManager.locationServicesEnabled() { |
||||
|
locationManager.delegate = self |
||||
|
locationManager.desiredAccuracy = kCLLocationAccuracyBest |
||||
|
locationManager.startUpdatingLocation() |
||||
|
showProgressHud() |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
// MARK: Other Functions |
||||
|
extension NewRegisterStep1ViewController { |
||||
|
|
||||
|
private func setup() { |
||||
|
setUI() |
||||
|
setBinding() |
||||
|
setUIBinding() |
||||
|
} |
||||
|
|
||||
|
private func setUI() { |
||||
|
let genderConfigure = TablePresenterConfiguration(presenterTitle: "Select Gender") |
||||
|
genderTextField.useAsDropDown( |
||||
|
with: genderConfigure, |
||||
|
items: ["Male", "Female", "Others"] as? [TablePresenterProtocol] |
||||
|
) |
||||
|
|
||||
|
let dobConfigure = TablePresenterConfiguration(presenterTitle: "Select Dob") |
||||
|
dobTextField.useAsDropDown( |
||||
|
with: dobConfigure, |
||||
|
items: ["Male", "Female", "Others"] as? [TablePresenterProtocol] |
||||
|
) |
||||
|
|
||||
|
let nativeCountryConfigure = TablePresenterConfiguration(presenterTitle: "Select Native Country") |
||||
|
nativeCountryTextField.useAsDropDown( |
||||
|
with: nativeCountryConfigure, |
||||
|
items: ["Male", "Female", "Others"] as? [TablePresenterProtocol] |
||||
|
) |
||||
|
} |
||||
|
|
||||
|
private func setUIBinding() { |
||||
|
|
||||
|
} |
||||
|
|
||||
|
private func setBinding() { |
||||
|
let input = NewRegisterStep1Presenter.Input( |
||||
|
sendLocation: sendLocation.asDriverOnErrorJustComplete() |
||||
|
) |
||||
|
let output = presenter.transform(input: input) |
||||
|
|
||||
|
output.isError |
||||
|
.drive( |
||||
|
onNext: { self.alert(type: .error, message: $0.localizedDescription) } |
||||
|
).disposed(by: disposeBag) |
||||
|
|
||||
|
output.isProgress |
||||
|
.drive( |
||||
|
onNext: { $0 ? self.showProgressHud() : self.hideProgressHud() } |
||||
|
).disposed(by: disposeBag) |
||||
|
|
||||
|
output.gpsAddress.drive(addressTextField.rx.text).disposed(by: disposeBag) |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
|
||||
|
extension NewRegisterStep1ViewController: CLLocationManagerDelegate { |
||||
|
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { |
||||
|
hideProgressHud() |
||||
|
guard let location = manager.location else { return } |
||||
|
sendLocation.onNext(location) |
||||
|
locationManager.stopUpdatingLocation() |
||||
|
} |
||||
|
|
||||
|
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) { |
||||
|
hideProgressHud() |
||||
|
|
||||
|
locationManager.stopUpdatingLocation() |
||||
|
let alert = UIAlertController( |
||||
|
title: "Settings", |
||||
|
message: "Allow location from settings", |
||||
|
preferredStyle: .alert |
||||
|
) |
||||
|
|
||||
|
self.present(alert, animated: true, completion: nil) |
||||
|
alert.addAction(UIAlertAction(title: "Move setting", style: .default, handler: { action in |
||||
|
switch action.style { |
||||
|
case .default: |
||||
|
UIApplication |
||||
|
.shared |
||||
|
.open( |
||||
|
NSURL(string: UIApplication.openSettingsURLString)! as URL, |
||||
|
options: [:], |
||||
|
completionHandler: nil |
||||
|
) |
||||
|
case .cancel: print("cancel") |
||||
|
case .destructive: print("destructive") |
||||
|
@unknown default: break |
||||
|
|
||||
|
} |
||||
|
})) |
||||
|
} |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue