Cómo enviar valores a un controller de vista principal en Swift

Estoy trabajando en una pantalla de configuration de controller de vista para mi aplicación iOS escrita en swift. Estoy usando un controller de navigation para ejecutar la vista de la tabla de configuration principal que muestra la celda titulada, "Método de input". El método actual se enumera a la derecha de la celda. Pueden hacer clic en la celda para ir al siguiente controller de vista donde pueden seleccionar el método de input que deseen.

Desde aquí, hay dos secciones. El primero es el método de input para elegir (pantalla táctil o joystick). La segunda sección es un joystick específico sobre si la persona es un zurdo o un derecho. No quiero que la vc se desenrolle cuando elijan un cuadro porque también pueden elegir uno en otra sección.

Mi pregunta: ¿Cómo puedo actualizar el campo de text en el controller principal del controller secundario.

Problemas que tengo para soluciones opcionales:

let parentVC: UIViewController = (self.navigationController?.parentViewController)! parentVC.inputMethod.text? = cellSelected // This doesn't work because it cannot find the label inputMethod. 

viewDidLoad () causará un retraso y el usuario ve el método anterior antes de que cambie.

No puedo saber cómo ejecutar una segue cuando alguien hace clic en el button Atrás en el lado superior izquierdo del controller de navigation, ya que el controller de navigation controla la segue.

No es una buena idea lanzar el controller de vista principal, incluso cuando esté seguro de qué class representa. Lo haré con un protocolo:

En el controller secundario, agregue un protocolo como:

 protocol ChildNameDelegate { func dataChanged(str: String) } class ChildClass { var delegate: ChildNameDelegate? func whereTheChangesAreMade(data: String) { delegate?.dataChanged(data) } } 

Y en el padre:

 class ParentClass: ChildNameDelegate { override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { guard let segueId = segue.identifier else { return } switch segueId { case "childSegue": let destVC = segue.destinationViewController as! ChildClass destVC.delegate = self break default: break } } // Child Delegate func dataChanged(str: String) { // Do whatever you need with the data } } 

parentViewController convertir el parentViewController en la class personalizada que tenga. Por ejemplo, si el padre tiene la class ExampleParentController , escribiría:

 let parentVC = (self.navigationController?.parentViewController)! as! ExampleParentController parentVC.inputMethod.text? = cellSelected 

Encontré una solución aquí: Modificar una variable de otro controller de vista rápido http://www.raywenderlich.com/115300/swift-2-tutorial-part-3-tuples-protocols-delegates-and-table-views

En lugar de intentar acceder directamente al controller de vista (lo que sería más fácil si no devolviera nada al controller de vista), puede usar un método de delegado para ajustar las variables. ¡El delegado funcionó como un encanto!