Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Xamarin NSNotificatioCenter: How can I get the NSObject being passed?

I am trying to post a notification in a view from my app to another one using NSNotificationCenter. So in my destination class I create my observer as follows:

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

and I have my method:

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

Now from another UIViewController I am posting a notification as follows:

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

How can I access the view controller that is being passed in my post notification in my destination class? In iOS it is very straight forward but I cannot seem to find my way in monotouch (Xamarin)...

like image 758
P. Sami Avatar asked Mar 18 '13 20:03

P. Sami


1 Answers

When you AddObserver, you want to do it in a slightly different way. Try the following:

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

and the declaration of your ChangeLeftSide method to conform to Action<NSNotification> expected by AddObserver - giving you the actual NSNotification object. :

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

So when you PostNotificationName, you're attaching the UIViewController object to the notification, which can be retrieved in your NSNotification via the Object property.

like image 67
Luke Avatar answered Oct 12 '22 23:10

Luke