Я придумал 2 решения этой проблемы, но родительский контроллер представления не знал о своем подклассе.
В первом примере родительский объект устанавливает для себя свойства, которые слушает дочерний элемент (через didSet
, затем обновляет свое представление соответствующим образом, однако это не идеально, потому что строковые поля entryDate
и entry
сами по себе бесполезны, почти избыточны в родительском.
class ParentViewController: UIViewController {
var entryDate: String?
var entry: String?
@IBAction func leavingView(){
self.entryDate = ""
self.entry = ""
self.dismiss(animated: true, completion: nil)
}
}
class ChildViewController: ParentViewController {
@IBOutlet var entryDateLabel: UILabel!
@IBOutlet var entryLabel: UILabel!
override var entryDate: String? {
didSet {
guard isViewLoaded else {
return
}
entryDateLabel.text = entryDate
}
}
override var entry: String? {
didSet {
guard isViewLoaded else {
return
}
entryLabel.text = entry
}
}
}
На мой взгляд, второе решение является более понятным и сохраняет детали реализации более отдельными, потому что вы используете инструкции или события для уведомления дочерних контроллеров представления.
class ParentViewController: UIViewController {
@IBAction func leavingView(){
self.dismiss(animated: true, completion: didLeaveView)
}
func didLeaveView() { }
}
class ChildViewController: ParentViewController {
@IBOutlet var entryDateLabel: UILabel!
@IBOutlet var entryLabel: UILabel!
override func didLeaveView() {
entryDateLabel.text = ""
entryLabel.text = ""
}
}