Skip to content

Instantly share code, notes, and snippets.

@Tavernari
Last active November 20, 2020 21:30
Show Gist options
  • Save Tavernari/108f34a94cb69adb5c1c928235f700d4 to your computer and use it in GitHub Desktop.
Save Tavernari/108f34a94cb69adb5c1c928235f700d4 to your computer and use it in GitHub Desktop.
Example of TransformViewController
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