【问题标题】:Removing activity items from UIActivityViewController after choose WhatsApp选择 WhatsApp 后从 UIActivityViewController 中删除活动项
【发布时间】:2019-10-05 01:20:36
【问题描述】:

我正在实施UIActivityViewController 以通过其他应用程序共享文本和图像。当 WhatsApp 不同时接受文本和图像时,我的问题就开始了,因此我想在用户选择与 WhatsApp 共享时删除文本(如果存在)。

UIActivityViewController中选择了目标应用后,如何删除一些活动项?

【问题讨论】:

    标签: ios objective-c whatsapp uiactivitycontroller


    【解决方案1】:

    首先,你需要创建一个符合UIActivityItemSource的类,并使用它而不是直接将文本或图像传递给UIActivityViewController

    所以不是

    UIActivityViewController(activityItems: [image, text])
    

    我们会传递新的物品来源

    UIActivityViewController(activityItems: [ImageItemSource(image), TextItemSource(text)]
    

    项目源类将如下所示:

    class TextItemSource: NSObject, UIActivityItemSource {
        private let text: String
    
        init(text: String) {
            self.text = text
            super.init()
        }
    
        func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
            text
        }
    
        func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? {
            text
        }
    }
    
    class ImageItemSource: NSObject, UIActivityItemSource {
        private let image: UIImage
    
        init(image: UIImage) {
            self.image = image
            super.init()
        }
    
        func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
            image
        }
    
        func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? {
            image
        }
    }
    

    现在我们可以控制要分享的内容,我们可以确切选择我们与每个应用分享的内容,方法是在返回数据之前检查activityType,如果我们认为我们不应该发送无论如何,我们可以简单地返回nil

    在您的情况下,如果您想与除 WhatsApp 之外的所有应用程序共享文本项,您只需执行以下操作:

    class TextItemSource: NSObject, UIActivityItemSource {
        ...
        func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? {
            if activityType?.rawValue.starts(with: "net.whatsapp.WhatsApp.") == true {
                // We'll return `nil` to WhatsApp forcing it to 
                //   ignore this whole text item and only show the image item instead
                return nil
            }
    
            return text
        }
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 2020-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      相关资源
      最近更新 更多