Ich versuche, ein einfaches mvvm Modell erstellen kvoEinfacher MVVM mit KVO
Mein Ziel besteht darin, wenn die UITextField Textänderungen automatisch den Text UILabel ändern. Aber aus irgendeinem Grund die observeValue
Funktion nicht
import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
var viewModel : TestViewModel?
@IBOutlet weak var LBLABEL: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
viewModel = TestViewModel()
addObserver(self, forKeyPath: #keyPath(viewModel.infoText), options: [.old, .new], context: nil)
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
viewModel?.infoText = textField.text
return true
}
// MARK: - Key-Value Observing
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "info" {
// Update Time Label
LBLABEL.text = viewModel?.infoText
}
}
}
class TestViewModel : NSObject{
var model : TestModel
var infoText:String? {
didSet{
model.info = self.infoText
}
}
override init() {
model = TestModel()
}
}
class TestModel {
var info:String?
}
Ich habe bereits versucht genannt wird der Beobachter Erklärung zu ändern oder sogar die Ansichtsmodell bekommt und Sets und es gelang ihm nie
Haben Sie 'textField.delegate = self' irgendwo in Ihrem Code hinzugefügt? –
@Ahmad F - ja. im Storyboard. Ich habe einige Breakpoints auf 'shouldChangeCharactersIn' gesetzt und der Code ist dort stehengeblieben. Der Wert der Strings im Modell und Viewmodel wurde korrekt geändert – Pedro