2015-08-22 1 views
0

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

+1

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

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 
}