j'ai un TableViewController, permet de l'appeler Un, qui est dans une vue en récipient d'un autre contrôleur de vue, B. J'ai besoin de A pour recharger ses données lorsqu'une valeur change en B. J'en ai également besoin pour obtenir cette valeur modifiée de B. Des idées?Recharger TableViewController de parent
0
A
Répondre
1
Avez-vous envisagé d'utiliser les notifications ?
Ainsi, B - Je ferais quelque chose comme:
// ViewControllerB.swift
import UIKit
static let BChangedNotification = "ViewControllerBChanged"
class ViewControllerB: UIViewController {
//... truncated
func valueChanged(sender: AnyObject) {
let changedValue = ...
NSNotificationCenter.defaultCenter().postNotificationName(
BChangedNotification, object: changedValue)
}
//... truncated
}
Suivi avec Un regardant quelque chose comme ça - où ValueType
est tout simplement le type de la valeur vous avez mentionné:
import UIKit
class ViewControllerA: UITableViewController {
//... truncated
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
//...truncated
NSNotificationCenter.defaultCenter().addObserver(self,
selector: "onBChangedNotification:",
name: BChangedNotification,
object: nil)
}
//... truncated
func onBChangedNotification(notification: NSNotification) {
if let newValue = notification.object as? ValueType {
//...truncated (do something with newValue)
self.reloadData()
}
}
}
Enfin - ne pas oublier à remove the observer en Méthode de deinit
:
import UIKit
class ViewControllerA: UITableViewController {
//... truncated
deinit {
NSNotificationCenter.defaultCenter().removeObserver(self)
}
//... truncated
}
Vous devez simplement invoquer une méthode dans A partir de votre instance objet B. Ceci est essentiellement un modèle de délégation. – Paulw11