【问题标题】:Customize share message based on ActivityType, in Xamarin iOS在 Xamarin iOS 中基于 ActivityType 自定义共享消息
【发布时间】:2016-10-02 16:01:37
【问题描述】:

我正在尝试制作一个 UIActivityViewController 并将每条消息记录为活动类型(电子邮件/短信/Facebook/Twitter/等)。我已经阅读了人们在目标 c 中执行此操作的许多方法。但由于某种原因,我无法让它与 Xamarin/Monotouch 一起使用。有人在 Xamarin 中这样做过吗?

objective-c 中的示例: https://www.albertopasca.it/whiletrue/objective-c-custom-uiactivityviewcontroller-icons-and-text/

我见过一些例子,比如传入一系列活动项以及一系列应用程序活动。我如何在 Xamarin 中做到这一点? UIActivityTypes 只是 NSStrings,我不能将 NSString[] 传递给 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);

我也尝试过继承 UIActivityItemProvider 并使用 GetItemForActivity 方法,但我不知道如何使用该 UIActivityItemProvider 初始化我的 UIActivityViewController。我如何在 Xamarin 中做到这一点?

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

    public override NSObject GetItemForActivity (UIActivityViewController activityViewController, NSString activityType)
    {
        return base.GetItemForActivity (activityViewController, activityType);
    }
}

【问题讨论】:

    标签: ios xamarin uiactivityviewcontroller uiactivity


    【解决方案1】:

    知道了。事实证明,您将您的子类 UIActivityItemProvider 作为活动项传递...

    使用我的子类 UIActivityItemProvider 创建 UIActivityViewController:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多