我开始搜索是想知道如何在iOS中与其他应用共享.我发现有两个重要的方法

  • UIActivityViewController
  • UIDocumentInteractionController

这些方法和其他方法在this SO answer例中进行了比较.

通常,当我在学习一个新概念时,我喜欢看到一个基本的例子来开始我的学习.一旦我完成了一些基本设置,我可以稍后按我喜欢的方式修改它.

有很多关于UIActivityViewController的问题,但我找不到任何问题,只是为了举一个简单的例子.由于我刚刚学会如何做到这一点,我将在下面提供我自己的答案.您可以随意添加更好的版本(或Objective-C版本).

推荐答案

UIActivityViewController示例项目

用两个按钮设置故事板,并将它们连接到视图控制器(参见下面的代码).

enter image description here

将图像添加到Assets.xcsets.我把我的叫作"狮子".

enter image description here

密码

import UIKit
class ViewController: UIViewController {
    
    // share text
    @IBAction func shareTextButton(_ sender: UIButton) {
        
        // text to share
        let text = "This is some text that I want to share."
        
        // set up activity view controller
        let textToShare = [ text ]
        let activityViewController = UIActivityViewController(activityItems: textToShare, applicationActivities: nil)
        activityViewController.popoverPresentationController?.sourceView = self.view // so that iPads won't crash
        
        // exclude some activity types from the list (optional)
        activityViewController.excludedActivityTypes = [ UIActivity.ActivityType.airDrop, UIActivity.ActivityType.postToFacebook ]
        
        // present the view controller
        self.present(activityViewController, animated: true, completion: nil)
        
    }
    
    // share image
    @IBAction func shareImageButton(_ sender: UIButton) {
        
        // image to share
        let image = UIImage(named: "Image")
        
        // set up activity view controller
        let imageToShare = [ image! ]
        let activityViewController = UIActivityViewController(activityItems: imageToShare, applicationActivities: nil)
        activityViewController.popoverPresentationController?.sourceView = self.view // so that iPads won't crash
        
        // exclude some activity types from the list (optional)
        activityViewController.excludedActivityTypes = [ UIActivity.ActivityType.airDrop, UIActivity.ActivityType.postToFacebook ]
        
        // present the view controller
        self.present(activityViewController, animated: true, completion: nil)
    }
    
}

结果

单击"共享一些文本"在左侧显示结果,单击"共享图像"在右侧显示结果.

enter image description here

注意事项

  • 我用iOS11和Swift 4重新测试了这一点.我不得不在模拟器中运行了几次才能正常工作,因为它超时了.这可能是因为我的电脑太慢了.
  • 如果您希望隐藏其中的一些选项,可以使用excludedActivityTypes来实现,如上面的代码所示.
  • 不包括popoverPresentationController?.sourceView行会导致你的应用程序在iPad上运行时崩溃.
  • 这不允许您将文本或图像共享到其他应用程序.你可能要UIDocumentInteractionController英镑才能买到.

另请参阅

Ios相关问答推荐

自定义组件中的通用型-无法访问特定于收件箱的属性

如何将Safari调试器附加到Turbo-iOS原生应用中的模拟器

ios PWA从外部链接返回后降低了innerheight

如何在iOS 17 SwiftUI中获取用户名

iOS 16.4,SwiftUI 底部工作表有时会忽略presentationDetents

SwiftUI - 搜索栏和导航标题之间的空间太大

RFID scanner 的蓝牙服务 UUID?

如何将 Info.plist 文件添加到 Xcode for admob,错误 添加后会产生多个命令

Swift:判断 Foundation (NS)Errors 与自定义协议的一致性

uikit中如何触发swiftui功能

使用按位|带有布尔操作数

无法在 CollectionView 中禁用部分弹跳 - 组合布局

SwiftUI 我自己的渲染函数的返回类型是什么?

使用 @MainActor 更新 UI 的适当策略是什么?

为什么我的应用在 Testflight 中没有下载 dSYM 按钮?

如何以编程方式调用视图控制器?

获取 iOS 上所有联系人的列表

iOS 中的 Crashlytics 不会继续通过 Fabric 应用程序中的构建您的项目

检测应用程序何时进入我的视图背景的最佳方法是什么?

使用 swift 3 在 UIView 上添加阴影