如何从 UIActivityItemSource 函数返回多个值

2023-11-30

是否可以从 UIActivityItemSource 函数返回多个值,并将它们传递给 UIActivityViewController 的 ActivityItems?

我想返回 [message, image, url] 数组并传递给 ActivityItems。但显然,我使用的 switch 代码仅返回一个值,要么是消息,要么是图像,要么是 url,具体取决于选择的活动。

如果我改变:func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? to: func.... -> [Any]?

UIActivityItemSource 抱怨:

“类型‘ActivityItemSource’不符合协议‘UIActivityItemSource’”

并让您使用“-> Any?”插入另一组相同的功能。

也许我不理解如何处理 init(),但如果有人能给我一个解决这个问题的方向,我将不胜感激。

我发现了类似的问题来自 UIActivityItemSource 的多个数据发帖者自己的计算结果是: “结果我需要做的就是向活动控制器提供多个项目,因为每个活动项目源只能提供一项。”

这是否意味着我需要为消息创建 ActivityItemSource1 类,为图像创建 ActivityItemSource2 类,为 url 创建 ActivityItemSource3 类?并将它们分配给这样的activityItems?:

让activityItems = [ActivityItemSource1(消息:消息),ActivityItemSource2(图像:图像),ActivityItemSource3(url:url)]

=================================================== ===============

class ActivityItemSource: NSObject, UIActivityItemSource {

var message: String!
var image: UIImage!
var url: URL!

init(message: String, image: UIImage, url: URL) {
    self.message = message
    self.image = image
    self.url = url
}

func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
    return message
}

func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? {

    switch activityType {
    case UIActivity.ActivityType.postToFacebook:
        return image
    case UIActivity.ActivityType.postToTwitter:
        return message
    case UIActivity.ActivityType.mail:
        return message
    case UIActivity.ActivityType.copyToPasteboard:
        return message
    case UIActivity.ActivityType.markupAsPDF:
        return message
    case UIActivity.ActivityType.message:
        return message
    case UIActivity.ActivityType.postToFlickr:
        return image
    case UIActivity.ActivityType.postToTencentWeibo:
        return message
    case UIActivity.ActivityType.postToVimeo:
        return image
    case UIActivity.ActivityType.print:
        return message
    case UIActivity.ActivityType(rawValue: "com.apple.reminders.RemindersEditorExtension"):
        return message
    case UIActivity.ActivityType(rawValue: "com.apple.mobilenotes.SharingExtension"):
        return message

    default:
       return message

     }

   }
}


class TodaysTasksTableViewcontroller: TableViewController {
    var image: UIImage
    var message: String
    var url: URL

    image = UIImage(named: "PoliPoliIconLarge")!
    message = "I will complete the following task(s) today :"
    url = URL(string: "http://www.beckos.com")!

let activityItems = [ActivityItemSource(message: message, image: image, url: url)]

    let activityVC =      UIActivityViewController(activityItems: activityItems, applicationActivities: nil)

// Exclude some activities from share popup screen
    activityVC.excludedActivityTypes = [
        UIActivity.ActivityType.assignToContact,
        UIActivity.ActivityType.print,
        UIActivity.ActivityType.addToReadingList,
        UIActivity.ActivityType.saveToCameraRoll,
        UIActivity.ActivityType.openInIBooks,
        //UIActivity.ActivityType(rawValue: "com.apple.reminders.RemindersEditorExtension"),
        //UIActivity.ActivityType(rawValue: "com.apple.mobilenotes.SharingExtension"),
    ]


    self.present(activityVC, animated: true, completion: nil)

................
    }

这就是我昨晚所做的。不过,我不确定这种方式在正确的编码风格方面是否有效。另外,我不确定我是否真正理解 ActivitySourceItems 的工作方式。有人可能可以以更有效的方式编写它。

基本上我创建了三个类,一个用于消息,一个用于图像,一个用于 url。然后将三个返回值传递给常量 ActivityItems。不过,Instagram 和 Snapchat 仍然无法使用此功能。除此之外,它还是做了我想做的事。

感谢您的链接,拉尔梅。我之前的搜索没有显示这些帖子。

class TableViewController: UITableViewController {     
    let activityItems = [ActivityItemSource(message: message),    ActivityItemSourceImage(image: image), ActivityItemSourceURL(url: url)]
    let activityVC = UIActivityViewController(activityItems: activityItems, applicationActivities: nil)

    // some exclusion goes here...

    self.present(activityVC, animated: true, completion: nil)

}

class ActivityItemSource: NSObject, UIActivityItemSource {

    var message: String!

    init(message: String) {
        self.message = message
    }

    func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
        return message
        // to display Instagram button, return image
        // image: Mail, Message, Notes, Twitter, Instagram, Shared Album, Post to Google Maps, Messenger, LINE, Snapchat, Facebook
        // message: Mail, Message, Notes, Twitter, Messenger, LINE, Facebook, LinkedIn
    }

    func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? {

        switch activityType {
        case UIActivity.ActivityType.postToFacebook:
            return nil
        case UIActivity.ActivityType.postToTwitter:
            return message
        case UIActivity.ActivityType.mail:
            return message
        case UIActivity.ActivityType.copyToPasteboard:
            return message
        case UIActivity.ActivityType.markupAsPDF:
            return message
        case UIActivity.ActivityType.message:
            return message
        case UIActivity.ActivityType.postToFlickr:
            return message
        case UIActivity.ActivityType.postToTencentWeibo:
            return message
        case UIActivity.ActivityType.postToVimeo:
            return message
        case UIActivity.ActivityType.print:
            return message
        case UIActivity.ActivityType(rawValue: "com.apple.reminders.RemindersEditorExtension"):
            return message
        case UIActivity.ActivityType(rawValue: "com.apple.mobilenotes.SharingExtension"):
            return message
        case UIActivity.ActivityType(rawValue: "com.burbn.instagram.shareextension"):
            return nil
        case UIActivity.ActivityType(rawValue: "jp.naver.line.Share"):
            return message

        default:
            return nil
        }
    }
}


class ActivityItemSourceImage: NSObject, UIActivityItemSource {

    var image: UIImage!


    init(image: UIImage) {
        //self.image = image
        self.image = UIImage(named: "PoliPoliIcon")!

    }


    func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
        return image
    }

    func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? {


        switch activityType {
        case UIActivity.ActivityType.postToFacebook:
            return nil
        case UIActivity.ActivityType.postToTwitter:
            return nil
        case UIActivity.ActivityType.mail:
            return image
        case UIActivity.ActivityType.copyToPasteboard:
            return image
        case UIActivity.ActivityType.markupAsPDF:
            return image
        case UIActivity.ActivityType.message:
            return image
        case UIActivity.ActivityType.postToFlickr:
            return image
        case UIActivity.ActivityType.postToTencentWeibo:
            return image
        case UIActivity.ActivityType.postToVimeo:
            return image
        case UIActivity.ActivityType.print:
            return image
        case UIActivity.ActivityType(rawValue: "com.apple.reminders.RemindersEditorExtension"):
            return nil
        case UIActivity.ActivityType(rawValue: "com.apple.mobilenotes.SharingExtension"):
            return nil
        case UIActivity.ActivityType(rawValue: "com.burbn.instagram.shareextension"):
            return image
        case UIActivity.ActivityType(rawValue: "jp.naver.line.Share"):
            return image
        default:
            return image

        }
    }

}


class ActivityItemSourceURL: NSObject, UIActivityItemSource {

    var url: URL!


    init(url: URL) {
        self.url = url
    }

    func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
        return url

    }

    func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? {

        switch activityType {
        case UIActivity.ActivityType.postToFacebook:
            return url
        case UIActivity.ActivityType.postToTwitter:
            return url
        case UIActivity.ActivityType.mail:
            return url
        case UIActivity.ActivityType.copyToPasteboard:
            return nil
        case UIActivity.ActivityType.message:
            return url
        case UIActivity.ActivityType.postToFlickr:
            return url
        case UIActivity.ActivityType.postToTencentWeibo:
            return url
        case UIActivity.ActivityType.postToVimeo:
            return url
        case UIActivity.ActivityType.print:
            return url
        case UIActivity.ActivityType(rawValue: "com.apple.reminders.RemindersEditorExtension"):
            return url
        case UIActivity.ActivityType(rawValue: "com.apple.mobilenotes.SharingExtension"):
            return url
        case UIActivity.ActivityType(rawValue: "com.burbn.instagram.shareextension"):
            return nil
        case UIActivity.ActivityType(rawValue: "jp.naver.line.Share"):
            return url
        //case UIActivity.ActivityType(rawValue: "com.snapchat.Share"):
          //  return nil

        default:
            return url

        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 UIActivityItemSource 函数返回多个值 的相关文章

  • FB SDK 3.0 我是否需要扩展访问令牌还是自动的?

    基于http developers facebook com roadmap offline access removal http developers facebook com roadmap offline access remova
  • 当 tableview 滚动时 UISegment 值发生变化

    我正在使用 UISegmentControl 在表格视图中显示客观类型问题 但是 如果我在任一单元格中选择一个段 那么如果我滚动 某些段值就会发生更改 我不知道如何解决这个问题 请指导我 细胞尺寸 160px 段色调颜色 蓝色 Coding
  • 动态更新 UIAlertView 消息和换行符问题

    我需要在 UIAlertView 的消息中显示多行文本 我尝试过添加 n 但没有效果 它仍然显示 这是一个示例 但是 如果我将 iPhone 切换为横向模式 它会按照我的预期显示该消息 然后 如果我切换回纵向模式 它也会正确显示 更新 经过
  • 了解 Matlab 中的 DEL2 函数以便用 C++ 对其进行编码

    为了用 C 编写 DEL2 matlab 函数 我需要了解该算法 我已经成功地为不在边界或边缘上的矩阵元素编写了函数 我已经看过几个有关它的主题 并通过输入 edit del2 或 type del2 来阅读 MATLAB 代码 但我不明白
  • 领域列表未存储在 Swift 4.2 的发布配置中

    我刚刚构建了我的应用程序的最新版本 并且遇到了一个问题List我的所有领域对象上的 s 都没有被存储 这是一些示例代码 Object public class ReportItem Object objc dynamic var id St
  • 切换到 Xcode 7 后,应用程序大小从 9 MB 增长到 60 MB,有解决办法吗?

    我一直在回顾 Git 历史来寻找文件大小发生巨大变化的原因 但我能找到的唯一真正原因是从 Xcode 6 切换到 Xcode 7 GM 我发现这些是文件大小贡献最大的 10 个 ipa创建自Archive操作在一个Release构建配置 u
  • Alamofire 仅在 GET 请求上出现请求错误

    我正在努力将我的项目从 AFNetworking 转移到 Alamofire 真的很喜欢这个项目 POST 请求工作得很好 但是 我在尝试发出 GET 请求时收到此错误 这是一些示例代码 class func listCloudCrednt
  • 找不到 -lDoubleConversion 的库

    我尝试在 XCode 上构建 但是ld library not found for lDoubleConversion发生错误 我可以建造react native run ios 这可行 但 XCode 无法构建 ld 警告 找不到选项 L
  • Swift 中使用 T 型进行泛型调用

    在我的应用程序中 我想创建一个通用方法 该方法根据给定类型 T 创建一个对象数组 我创建了以下函数 func getArray
  • 我可以将特定警告视为错误吗?

    以下是我有时在学生代码中看到的模式的简化版本 bool foobar int a int b if a lt b return true 当然 真正的代码要复杂得多 Visual Studio 报告警告 C4715 并非所有控制路径都会返回
  • iOS 上邮件到达时收到通知吗?

    当邮件到达标准邮件应用程序时 有没有办法让应用程序收到通知 更准确地说 我想编写一个应用程序 它能够从标准邮件应用程序读取传入的电子邮件 其中包含自定义 txt 格式的新联系人或事件 然后 应用程序应将此新联系人 事件添加到 ipad 反之
  • 为什么 .Net 框架指南建议您不要使用 ref/out 参数?

    显然 他们很 混乱 这是认真的原因吗 你还能想到其他的吗 你见过有多少开发人员并不真正理解 ref out 吗 我在真正需要的地方使用它们 但在其他地方则不然 它们通常仅在您想有效返回两个或多个值时才有用 在这种情况下它至少值得thinki
  • 如何为 App Store 添加关联域? - App Store Connect 的 app-ads.txt 文件

    如您所知 Admob 向发布商发送了有关 app ads txt 文件的电子邮件 Admob 在电子邮件中表示 因此 我们邀请您仔细检查您的 app ads txt 文件 如果 您已经在发布日期之前发布了一份 文件 应发布在列出的网站的根目
  • 如何在调用-reloadData后保留UITableView contentoffset

    CGPoint offset table contentOffset table reloadData table setContentOffset offset animated NO unuseful block UITableView
  • geocoder.geocodeAddressString 今天不再适用于快速更新

    https developer apple com library prerelease mac releasenotes General APIDiffsMacOSX10 11 Swift CoreLocation html https
  • 如何使用 UISlider 以及如何将滑块设置为特定值?

    我是第一次使用 UIslider 首先我想知道如果值的范围是 0 到 10 如何获取滑块位置的值 其次 我希望我的滑块设置为 5 个不同的值 如 1 2 3 4 5 slider should not set between the lab
  • iOS swift 应用程序启动时出现黑屏

    我有个问题 当我启动我的应用程序时 会看到黑屏几秒钟 然后出现启动屏幕 我的启动画面不是默认的 我使用了视图控制器 因为我的启动画面有一个动画 我搜索了一个解决方案 我得到了这个 在我的闪屏加载 iPhone 之前出现黑屏 https st
  • 奇怪的 Facebook ID [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有两个 Facebook 应用程序 它们都正在开发中 其中一个是很久以前创建的 而另一个则是相当新的 自从我升级到新的 iOS Faceb
  • Eddystone 信标检测问题

    以下是我使用 iPhone iOS 9 检测 Eddystone 的代码 void viewDidLoad super viewDidLoad if CLLocationManager locationServicesEnabled loc
  • Expo eas-cli iOS 构建失败

    我已经使用 React Native 创建了一个应用程序 并尝试通过 Expo 的 eas cli 创建一个 iOS 应用程序商店 跑步时eas build platform ios the Fastlane build failed wi

随机推荐

  • 访问当前系统时区

    基本上我可以使用以下代码检测系统时区列表 foreach TimeZoneInfo info in tz Debug Log time zone id info Id display name info DisplayName 运行此代码
  • AjaxForm 结果中的 AjaxForm

    这是我的观点 foreach var item in Model tr Html RenderPartial PhoneRow item tr PhoneRow model PhoneModel using Ajax BeginForm E
  • Storage::move 给出“在路径中找不到文件:” Laravel 和 Ubuntu

    我想移动一些文件 Storage move posts temp val photos post gt id val 但它给了我 File not found at path home vagrant Code 有什么特殊的配置需要寻找吗
  • Pandas 和 SQLAlchemy:在连接期间重命名列

    I have table A and table B 两者都有一个专栏id和一列name 当我使用pd read sql 将 SQLAlchemy 查询的结果转换为 pandas DataFrame 生成的 DataFrame 有两列 名为
  • 解析数据 org.json.JSONException 时出错:在字符 0 处输入结束 - Android

    我正在开发一个测试 Android 应用程序 它必须显示来自 mysql 数据库的一些数据 这是我的日志 05 22 17 10 56 865 E JSON Parser 31648 Error parsing data org json
  • 如何优雅地检测 SSL

    我有一个 Web 服务 可以绑定到 ssl 或普通 http Java 客户端配置为了解服务器主机和端口 当客户端连接时 我构建服务器端点 例如http 主机 端口 服务 客户端不知道服务器是否使用 ssl 服务器始终绑定到单个端口 因此它
  • 自定义 EditorTemplate 未在 MVC4 中用于 DataType.Date

    我正在使用以下命令将 MVC3 应用程序升级到 MVC4来自微软的说明 一切都进行得相当顺利 除了我的一些日期模型属性现在呈现不同 例如 这些属性之一在视图模型中定义如下 Required ErrorMessage Required Dat
  • 当上游存在更改时,为什么 git status 显示分支是最新的?

    更改存在于跟踪分支的上游 但是当我输入时git status它表明我的本地分支机构是最新的 这是新行为吗 我是否更改了配置设置 或者出了什么问题 ubuntu host my repo git status On branch master
  • 占位符中的不同颜色[重复]

    这个问题在这里已经有答案了 我有一个带有占位符的输入字段 如下所示
  • OpenOffice Base 中的 sql 方言

    我熟悉 SQLite 和 MySQL 中的 SQL 但 OpenOffice Base 似乎要么非常瘫痪 要么我不明白如何执行原始 SQL 我想 有效地 这样做 INSERT INTO t2 SELECT NULL as id t foo
  • 如何确保编译时枚举开关的完整性?

    我有几个 switch 语句来测试enum All enum值必须在switch的陈述case陈述 在代码重构期间 可能会发生以下情况 enum收缩和增长 当 的时候enum收缩编译器会抛出错误 但如果enum成长 匹配状态被遗忘并产生运行
  • 在共享主机上显示 Laravel 存储的图像

    我已经在实时服务器上成功部署了我的第一个 Laravel 应用程序 一切看起来都很棒 除了我无法显示正在上传到的图像 myproject src storage app public myfolder1 folder 这是我在 HostGa
  • 如何将命令的输出插入批处理文件中的变量?

    在 Windows 上的批处理文件中 我想要一些变量具有以下输出dir b命令 如何实现这一目标 批处理文件不能很好地处理这个用例 我确实找到了一个描述使用临时文件的技术的线程
  • 规范与非规范终端输入

    我正在准备考试 我对 Unix 中规范与非规范输入 输出的工作方式感到困惑 例如 curses 我知道有一个缓冲区可以应用 行规则 来进行规范输入 这是否意味着非规范输入会绕过缓冲区 或者只是意味着不应用任何线路规则 此过程对于输入和输出操
  • 如何将文本转换为\x代码?

    我想将普通文本转换为 x 代码 例如 x14 x65 x60 例如 normal text base64 decode converted x codes for above text x62 141 x73 145 x36 64 x5f
  • Python用strptime解析日期

    我有以这种格式返回日期的网址 url date 2015 01 12T08 43 02Z 我不知道为什么会有字符串 将其获取为更简单 2015 01 1208 43 02 使用它来解析会更简单 datetime datetime strpt
  • 根据数组数量显示 div

    这是我的功能 function yyy hero image option callback hero options get option hero options count count hero options totalimg co
  • 在 C# DllImport 中使用 32 位或 64 位 dll

    情况如下 我在 dot net 应用程序中使用基于 C 的 dll 有 2 个 dll 一个是 32 位版本 称为 MyDll32 dll 另一个是 64 位版本 称为 MyDll64 dll 有一个静态变量保存 DLL 文件名 字符串 D
  • 如何在回收站视图android中选择多个项目?

    我想在回收器视图中选择多个项目 当选择它时 我想将该项目的复选框的可见性设置为可见 所以 只要我能够设置onlongClickListner使用接口和处理onLongClick片段中的事件 每当用户长按任何项目时 应用程序onCLick逻辑
  • 如何从 UIActivityItemSource 函数返回多个值

    是否可以从 UIActivityItemSource 函数返回多个值 并将它们传递给 UIActivityViewController 的 ActivityItems 我想返回 message image url 数组并传递给 Activi