Last active
November 20, 2020 21:30
-
-
Save Tavernari/108f34a94cb69adb5c1c928235f700d4 to your computer and use it in GitHub Desktop.
Example of TransformViewController
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
| import UIKit | |
| class TransformViewController : UIViewController { | |
| lazy var transformModel: TransformModel = { TransformModel() }() | |
| lazy var transformView: TransformView = { TransformView().make() }() | |
| var transformButton: UIButton { transformView.transformButton } | |
| var inputTextField: UITextField { transformView.inputTextField } | |
| private var transformModelObservation: NSKeyValueObservation? | |
| @objc func textDidChange(textField: UITextField) { | |
| transformModel.text = textField.text | |
| } | |
| @objc func transformTouched() { | |
| transformModel.reverse() | |
| } | |
| private func bindView() { | |
| inputTextField.delegate = self | |
| inputTextField.addTarget(self, | |
| action: #selector(textDidChange), | |
| for: .editingChanged) | |
| transformButton | |
| .addTarget(self, | |
| action: #selector(transformTouched), | |
| for: .touchUpInside) | |
| } | |
| func transformModelUpdated(model: TransformModel, change: NSKeyValueObservedChange<String?>) { | |
| self.inputTextField.text = model.text | |
| } | |
| private func bindModel() { | |
| transformModelObservation = transformModel.observe(\.text, | |
| options: .new, | |
| changeHandler: transformModelUpdated) | |
| } | |
| override func loadView() { | |
| super.loadView() | |
| view = transformView | |
| bindView() | |
| bindModel() | |
| } | |
| private func showOnlyLettersAlert() { | |
| let alert = UIAlertController(title: "Oops 🤦♂️", | |
| message: "Only letters please!", | |
| preferredStyle: .alert) | |
| alert.addAction(.init(title: "Ok", | |
| style: .destructive, | |
| handler: nil)) | |
| self.present(alert, | |
| animated: true, | |
| completion: nil) | |
| } | |
| } | |
| extension TransformViewController: UITextFieldDelegate { | |
| func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { | |
| guard transformModel.hasOnlyLetters(string) else { | |
| showOnlyLettersAlert() | |
| return false | |
| } | |
| return true | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment