Xamarin iOS Desvía Segue o DesmissViewController mediante progtwigción y devuelve datos

He creado una segue en mi storyboard. Es un segue modal y le di un identificador de LoginSegue.

En mi controller, hago:

PerformSegue("LoginSegue", this); 

Todo está bien. Nuevo controller aparece como se esperaba.

Para volver a la vista de llamada, puedo usar una function de desenrollar conectando un button al desenrollar segue en el controller que llama. Esto funciona bien.

O puedo llamar (desde el código):

 DismissViewController(true, null); 

La cuestión es que quiero devolver algunos datos.

ParentViewController es nulo.

Necesito hacer alguna validation antes de regresar a la vista de llamadas, por lo que hacer la desconnection automática desde un button no es una opción.

  [Action("UnwindToCaller:")] public void UnwindToCaller(UIStoryboardSegue seque) { var loginViewController = (LoginViewController)seque.SourceViewController; var data = loginViewController.getData(); Console.WriteLine("Unwind to Caller Here."); } 

También parece que no puedo encontrar una manera de darle a desennetworkingar un Id de storyboard.

Si pudiera realizar el desenrollamiento segue del código, todo estaría bien, o si pudiera transferir algunos datos con el DesmissViewController también sería bueno.

Una vez más, esto parece ser algo bastante común.

Bien, encontré una solución. Espero que esto ayude a los demás.

Entonces, en el controller de vista de llamadas, cuando preparo ForSegue, paso una reference al controller de vista llamante. Entonces tengo un método que se llama desde la vista modal.

Aquí está la reference de Xamarin: http://developer.xamarin.com/recipes/ios/general/storyboard/storyboard_a_tableview/

 public override void PrepareForSegue(UIStoryboardSegue segue, NSObject sender) { if (segue.Identifier == "LoginSegue") { var destCtrl = segue.DestinationViewController as LoginViewController; if (destCtrl != null) { // pass in a reference to THIS view controller. destCtrl.SetData(this); } } base.PrepareForSegue(segue, sender); } 

También en el controller de vista llamante

  public void LoggedIn (string someFlag) { Console.WriteLine("Logged in with : " + someFlag); DismissViewController(true, null); } 

Y el LoginViewController

 public void SetData (CallingViewController callingCtrl) { calllingViewController = callingCtrl; } 

Luego, cuando esté listo para regresar.

 callingViewController.LoggedIn("the flag");