ios - 在 Swift 中使用 UIActivityViewController 共享文本或图像的基本示例

标签 ios swift uiactivityviewcontroller

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

  • UIActivityViewController
  • UIDocumentInteractionController

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

当我学习一个新概念时,我常常喜欢看一个基本的例子来帮助我入门。一旦我完成了一些基本设置,我就可以稍后根据自己的喜好对其进行修改。

有很多与 UIActivityViewController 相关的 SO 问题,但我找不到任何只是要求一个简单示例的问题。由于我刚刚学会了如何执行此操作,因此我将在下面提供自己的答案。随意添加一个更好的版本(或 Objective-C 版本)。

最佳答案

UIActivityViewController 示例项目

使用两个按钮设置 Storyboard并将它们连接到 View Controller (参见下面的代码)。

enter image description here

将图像添加到您的 Assets.xcassets。我叫我的“狮子”。

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

注意事项

  • 我用 iOS 11 和 Swift 4 重新测试了它。我必须在模拟器中运行它几次才能正常工作,因为它超时了。这可能是因为我的电脑速度很慢。
  • 如果您希望隐藏其中一些选项,您可以使用 excludedActivityTypes 来实现,如上面的代码所示。
  • 不包含 popoverPresentationController?.sourceView 行会导致您的应用程序在 iPad 上运行时崩溃。
  • 这不允许您与其他应用共享文本或图像。为此,您可能需要 UIDocumentInteractionController

另见

关于ios - 在 Swift 中使用 UIActivityViewController 共享文本或图像的基本示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35931946/

相关文章:

ios - 想要将 API 数据显示到标签(Swift、Alamofire)

ios - 如果下面有另一个 UIView,如何在 UIView 上添加阴影

ios - 如何在 ResearchKit 中配置具有多个 ORKAudioSteps 的 ORKOrderedTask?

ios - 从 UIActivityViewController 禁用 Messenger

ios - xcode 4.5一些安装错误

ios - 自定义 UITableview 单元格偶尔会在其他单元格之上重叠/复制

ios - Swift - 使用 SpriteKit 提高移动节点的速度

ios - 如何使用 uiactivityviewcontroller 修复默认弹出菜单

ios - 在单个 UIActivityViewController 中为不同的服务提供不同的内容

ios - TableView 不会在 Storyboard中拉伸(stretch)到全屏