当前位置: 首页 > 面试题库 >

为UIActivityViewController Swift设置不同的活动项目

商骞仕
2023-03-14
问题内容

我有UIActivityViewController4个选项: 邮件/邮件/ TW / FB 。我想为每个选项发送不同的活动!

对于例如:在iMessage表,我需要把:StringNSURL,和UIImage。在邮件中,我需要将字符串放置在“主题”字段中,然后将“字符串”放置在主体中,UIImage并且NSURL也要放置。在TW/FB
我想要放置图像的地方,例如社交文章,也有一些String和NSURL

您是否知道在iOS8中使用Swift可以做到这一点?

我搜索了很多代码,但没有找到最适合我的代码。


问题答案:

您应该利用该UIActivityItemSource协议。activityItems初始化程序的参数UIActivityViewController接受一个数据对象数组或一个实现UIActivityItemSource协议的对象数组。

作为示例,请考虑以下项目来源。

class MyStringItemSource: NSObject, UIActivityItemSource {
    @objc func activityViewControllerPlaceholderItem(activityViewController: UIActivityViewController) -> AnyObject {
        return ""
    }

    @objc func activityViewController(activityViewController: UIActivityViewController, itemForActivityType activityType: String) -> AnyObject? {
        if activityType == UIActivityTypeMessage {
            return "String for message"
        } else if activityType == UIActivityTypeMail {
            return "String for mail"
        } else if activityType == UIActivityTypePostToTwitter {
            return "String for twitter"
        } else if activityType == UIActivityTypePostToFacebook {
            return "String for facebook"
        }
        return nil
    }

    func activityViewController(activityViewController: UIActivityViewController, subjectForActivityType activityType: String?) -> String {
        if activityType == UIActivityTypeMessage {
            return "Subject for message"
        } else if activityType == UIActivityTypeMail {
            return "Subject for mail"
        } else if activityType == UIActivityTypePostToTwitter {
            return "Subject for twitter"
        } else if activityType == UIActivityTypePostToFacebook {
            return "Subject for facebook"
        }
        return ""
    }

    func activityViewController(activityViewController: UIActivityViewController, thumbnailImageForActivityType activityType: String!, suggestedSize size: CGSize) -> UIImage! {
        if activityType == UIActivityTypeMessage {
            return UIImage(named: "thumbnail-for-message")
        } else if activityType == UIActivityTypeMail {
            return UIImage(named: "thumbnail-for-mail")
        } else if activityType == UIActivityTypePostToTwitter {
            return UIImage(named: "thumbnail-for-twitter")
        } else if activityType == UIActivityTypePostToFacebook {
            return UIImage(named: "thumbnail-for-facebook")
        }
        return UIImage(named: "some-default-thumbnail")
    }
}

上面的项目源根据活动类型返回不同的字符串数据对象,主题和缩略图图像。要使用它,您只需要将其传递给UIActivityViewController初始化程序即可。

UIActivityViewController(activityItems: [MyStringItemSource()], applicationActivities: nil)

同样,您可以定义一个自定义MyUrlItemSource类,该类根据所选活动返回不同的URL,并将其传递给初始化程序。

UIActivityViewController(activityItems: [MyStringItemSource(), MyUrlItemSource()], applicationActivities: nil)

所有这一切都为官方文档中列出UIActivityViewControllerUIActivityItemSource



 类似资料:
  • 我总共有三个活动,我正在为每个活动实现admob,每个活动都有自己的横幅,当活动被改变时,另一个活动挂了一点,因为广告加载在后台,是否有任何方法,一个横幅出现在所有活动时,切换,以避免延迟。

  • 我是Kafka的初来乍到,有一些基本的怀疑。我试着做一个Kafka建立的多节点(主动-主动)。情况如下:- 运行单个zookeeper(端口:2181) 创办了三家Kafka经纪人(9092、9093、9094) 创建单个主题测试(分区:1,复制3) 使用代理列表启动生产者(9092,9093) 在9092、9093、9094上启动了使用者,但它们都在使用相同的主题。 现在我怀疑的是,当我从生产者

  • 问题内容: 我在一个Android项目中使用ORMLite,并且我不想使用扩展活动,因为我是在AsyncTask上将值插入数据库中。 在文档中说: “如果您不想扩展和其他基类,那么您将需要复制它们的功能。您需要在代码的开头进行调用,保存帮助程序并根据需要使用它,然后在你完成了。” 它还说要在中添加数据库帮助程序类。所以我不确定我在做什么错。 我正在使用一个为我的数据层调用的类,如下所示: 我正在使

  • 我正在从事两个不同的项目,都使用不同的maven文件 当我在项目之间切换时,它会重新下载存储库文件夹中的所有maven依赖项,删除以前项目的依赖项 是否有任何方法可以使用两个,并为两个项目维护不同的存储库。

  • 我正在尝试启动一个活动,其中包括捆绑包。我正在尝试将这个捆绑包设置为空,因为还没有任何东西传递给这个活动。 目前,Android系统导致活动崩溃。未找到资源错误 编辑添加错误日志 08-24 10:39:33.180:E/AndroidRuntime(21177):致命异常:main 08-24 10:39:33.180:E/AndroidRuntime(21177):java。lang.Runt