2013-03-18 4 views
7

Sto tentando di inviare una notifica in una vista dalla mia app a un'altra utilizzando NSNotificationCenter. Così nella mia classe di destinazione Creo il mio osservatore come segue:Xamarin NSNotificatioCenter: come posso far passare NSObject?

NSNotificationCenter.DefaultCenter.AddObserver ("ChangeLeftSide", delegate {ChangeLeftSide(null);}); 

e ho il mio metodo:

public void ChangeLeftSide (UIViewController vc) 
{ 
    Console.WriteLine ("Change left side is being called"); 
} 

Ora da un altro UIViewController sto inviando una notifica come segue:

NSNotificationCenter.DefaultCenter.PostNotificationName("ChangeLeftSide", this); 

Come posso accedere al controller della vista che viene passato nella mia notifica di post nella mia classe di destinazione? In iOS è molto semplice, ma non riesco a trovare la strada giusta in monotouch (Xamarin) ...

risposta

0

ho trovato la risposta, ecco le modifiche che devono essere fatte sul codice ho postato nella domanda:

public void ChangeLeftSide (NSNotification notification) 
{ 
    Console.WriteLine ("Change left side is being called"); 
    NSObject myObject = notification.Object; 
    // here you can do whatever operation you need to do on the object 
} 

e viene creato l'osservatore:

NSNotificationCenter.DefaultCenter.AddObserver ("ChangeLeftSide", ChangeLeftSide); 

ora è possibile cast o type controlla il NSObject e fai qualcosa con esso! Fatto!

+1

Semplicemente divertente, trascorri un anno per trovare la risposta che viene pubblicata qui sotto :) – Injectios

6

Quando si AddObserver, si desidera farlo in un modo leggermente diverso. Provare quanto segue:

NSNotificationCenter.DefaultCenter.AddObserver ("ChangeLeftSide", ChangeLeftSide); 

e la dichiarazione del metodo ChangeLeftSide per conformarsi alle Action<NSNotification> atteso dal AddObserver - dando l'oggetto reale NSNotification. :

public void ChangeLeftSide(NSNotification notification) 
{ 
    Console.WriteLine("Change left side is being called by " + notification.Object.ToString()); 
} 

Quindi, quando si PostNotificationName, si sta collegando l'oggetto UIViewController alla notifica, che può essere recuperato nel vostro NSNotification tramite la proprietà Object.

+0

Ah cacca, non ho visto la tua modifica. – Luke

+0

Grazie comunque :) Sicuramente hai una formulazione migliore della mia! –