问题描述
我开始搜索时想知道如何与iOS中的其他应用分享。我发现有两个重要的方法是
-
UIActivityViewController
-
UIDocumentInteractionController
这些和其他方法在
将图像添加到Assets.xcassets。我称我为狮子。
注释
- 我记得使用iOS 11和Swift 4进行此操作。我必须在它运行之前在模拟器中运行它几次,因为它已超时。这可能是因为我的计算机速度很慢。
- 如果您希望隐藏其中一些选项,可以使用
excludedActivityTypes
执行此操作如上面的代码所示。 - 不包括
popoverPresentationController?.sourceView
行会导致您的应用在iPad上运行时崩溃。 - 这不允许您与其他应用共享文本或图像。你可能想要
UIDocumentInteractionController
。
参见
I started my search by wanting to know how I could share to other apps in iOS. I discovered that two important ways are
UIActivityViewController
UIDocumentInteractionController
These and other methods are compared in this SO answer.
Often when I am learning a new concept I like to see a basic example to get me started. Once I get something basic set up I can modify it how I like later.
There are many SO questions related to UIActivityViewController
, but I couldn't find any that were just asking for a simple example. Since I just learned how to do this, I will provide my own answer below. Feel free to add a better one (or an Objective-C version).
UIActivityViewController Example Project
Set up your storyboard with two buttons and hook them up to your view controller (see code below).
Add an image to your Assets.xcassets. I called mine "lion".
Code
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 = [ UIActivityType.airDrop, UIActivityType.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 = [ UIActivityType.airDrop, UIActivityType.postToFacebook ]
// present the view controller
self.present(activityViewController, animated: true, completion: nil)
}
}
Result
Clicking "Share some text" gives result on the left and clicking "Share an image" gives the result on the right.
Notes
- I retested this with iOS 11 and Swift 4. I had to run it a couple times in the simulator before it worked because it was timing out. This may be because my computer is slow.
- If you wish to hide some of these choices, you can do that with
excludedActivityTypes
as shown in the code above. - Not including the
popoverPresentationController?.sourceView
line will cause your app to crash when run on an iPad. - This does not allow you to share text or images to other apps. You probably want
UIDocumentInteractionController
for that.
See also
- Add sharing to your Swift app via UIActivityViewController
- UIActivityViewController from NSHipster
UIActivityViewController
documentation- Share extension documentation
- comparison with
UIDocumentInteractionController
这篇关于在Swift中使用UIActivityViewController共享文本或图像的基本示例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!