3

I'm trying to make a UIActivityViewController and taler each message to the Activity Type (Email/SMS/Facebook/Twitter/etc). I've read many ways people do this in objective c. But I can't get it working with Xamarin/Monotouch for some reason. Has anyone done this in Xamarin?

Example of this in objective-c: https://www.albertopasca.it/whiletrue/objective-c-custom-uiactivityviewcontroller-icons-and-text/

I've seen some examples do things like pass in an array of activity items along with an array of application activities. How do I do that in Xamarin? The UIActivityTypes are just NSStrings and I can't pass an NSString[] into the constructor for UIActivityViewController

NSObject[] activityItems = new NSObject[] { item1, item2, item3, image };
NSString[] applicationActivities = new NSString[] { UIActivityType.Mail, UIActivityType.PostToTwitter, UIActivityType.Message };

UIActivityViewController activityController = new UIActivityViewController (activityItems, applicationActivities);

I've also tried subclassing UIActivityItemProvider and using the GetItemForActivity method, but I dont' know how to initialize my UIActivityViewController with that UIActivityItemProvider. How do I do that in Xamarin?

public class MyActivityItemProvider : UIActivityItemProvider
{
    public MyActivityItemProvider ()
    {
    }

    public override NSObject GetItemForActivity (UIActivityViewController activityViewController, NSString activityType)
    {
        return base.GetItemForActivity (activityViewController, activityType);
    }
}
elp
  • 8,021
  • 7
  • 61
  • 120
LampShade
  • 2,675
  • 5
  • 30
  • 60

1 Answers1

4

Got it. It turns out, you pass your subclassed UIActivityItemProvider in as the activity item...

Creating the UIActivityViewController using my subclassed UIActivityItemProvider:

MyActivityItemProvider myActivityItemProvider = new MyActivityItemProvider (new NSString("blah blah blah"));
NSObject[] activityItems = new NSObject[] { myActivityItemProvider };
UIActivityViewController activityController = new UIActivityViewController(activityItems, null);

Subclassed UIActivityItemProvider:

public class MyActivityItemProvider : UIActivityItemProvider
{
    public MyActivityItemProvider (NSObject a_placeholderItem) : base (a_placeholderItem)
    {
    }

    public override NSObject GetItemForActivity (UIActivityViewController activityViewController, NSString activityType)
    {
        if (activityType == UIActivityType.Mail)
        {
            return new NSString("Email body");
        }
        else if (activityType == UIActivityType.Message)
        {
            return new NSString("Message body");
        }
        else if (activityType == UIActivityType.PostToTwitter)
        {
            return new NSString("Tweeeety");
        }

        return base.GetItemForActivity (activityViewController, activityType);
    }
}
LampShade
  • 2,675
  • 5
  • 30
  • 60