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);
}
}
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);
}
}