有没有办法从我的ShareExtention中删除以RED标记的TextView-和PreviewPart?
我使用默认值:
class ShareViewController: SLComposeServiceViewController
作为ViewController
我想只显示下面的目的地选择器(我知道如何创建) 我知道您可以创建自己的ViewController,但重建默认的ViewController非常困难。
第二件事是: 您建议使用什么方法来传输/复制数据/文件以及阅读主应用程序的文档目录?
我想将所选文档传输/复制到我的主应用程序的DocumentsDirectory中。两者都在同一个AppGroup中。如果我只是在UserDefault中保存当前Document的Url,那么我猜主应用程序无法访问它。
我需要阅读主应用程序的文档目录,因为我需要文件层次结构,所以我可以选择保存位置。
注意:因为无论出于何种原因,评论中存在一些混淆:这是我自己的ShareExtention,而不是UIActivityController中的其他内容
答案 0 :(得分:0)
这不是最好的,但这是基于docs的结果:
override func viewDidLoad() {
super.viewDidLoad()
textView.isHidden = true
}
但是那里有空白。也许最好放一些占位符文本并阻止用户输入。您可以在文档中使用其他选项,也可以将textView
(是UITextView
)弄乱。
编辑:这是一个完整的示例,该文本在文本字段中显示URL,灰色且与用户不可交互。
class ShareViewController: SLComposeServiceViewController {
override func viewDidLoad() {
super.viewDidLoad()
textView.isUserInteractionEnabled = false
textView.textColor = UIColor(white: 0.5, alpha: 1)
textView.tintColor = UIColor.clear // TODO hack to disable cursor
getUrl { (url: URL?) in
if let url = url {
DispatchQueue.main.async {
// TODO this is also hacky
self.textView.text = "\(url)"
}
}
}
}
override func isContentValid() -> Bool {
// Do validation of contentText and/or NSExtensionContext attachments here
return true
}
func getUrl(callback: @escaping ((URL?) -> ())) {
if let item = extensionContext?.inputItems.first as? NSExtensionItem,
let itemProvider = item.attachments?.first as? NSItemProvider,
itemProvider.hasItemConformingToTypeIdentifier("public.url") {
itemProvider.loadItem(forTypeIdentifier: "public.url", options: nil) { (url, error) in
if let shareURL = url as? URL {
callback(shareURL)
}
}
}
callback(nil)
}
override func didSelectPost() {
getUrl { (url: URL?) in
if let url = url {
DispatchQueue.main.async {
print("url: \(url)")
}
}
}
}
override func configurationItems() -> [Any]! {
// To add configuration options via table cells at the bottom of the sheet, return an array of SLComposeSheetConfigurationItem here.
return []
}
}
答案 1 :(得分:-1)
你不能。 当您使用共享扩展程序时,您将在之后选择要共享的应用程序,从而将自己插入到所述应用程序的共享扩展程序中。
您的应用没有,也无法访问所说的共享扩展程序,它们与主应用程序运行时完全分开。
此外,这允许用户自定义他们共享的内容。
对于帖子的第二部分,您需要详细说明,谁想要转移文档,您是开发者还是最终用户?
答案 2 :(得分:-1)
对我有用的是使用自定义解决方案而不是SLComposeServiceViewController
。它看起来相同,并且可以添加我想要的任何元素(请参见末尾的图片和here's the code at the commit when it was implemented)。
步骤:
( code )将ShareViewController
更改为简单的UIViewController
( code )为ShareViewController
(故事板)将容器视图添加到ShareViewController
(故事板)添加导航控制器
(故事板)在ShareViewController
的容器视图中嵌入导航控制器
在导航控制器中自定义视图控制器(例如,请参见this SO thread )
ShareViewController
更改为简单的UIViewController
import UIKit
class ShareViewController: UIViewController {
// ^^^^^^^^^^^^^^^^
ShareViewController
添加模糊效果 // ShareViewController continued from Step 1.
override func viewDidLoad() {
super.viewDidLoad()
// https://stackoverflow.com/questions/17041669/creating-a-blurring-overlay-view/25706250
// only apply the blur if the user hasn't disabled transparency effects
if UIAccessibilityIsReduceTransparencyEnabled() == false {
view.backgroundColor = .clear
let blurEffect = UIBlurEffect(style: .dark)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
//always fill the view
blurEffectView.frame = self.view.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.insertSubview(blurEffectView, at: 0)
} else {
view.backgroundColor = .black
}
// Do any additional setup after loading the view.
}
ShareViewController
从对象库中将Container View
拖到情节提要中的ShareViewController
中,然后调整尺寸。例如:
将导航控制器从对象库拖到情节提要。
ShareViewController
的容器视图中从ShareViewController
的容器视图中拖动到导航控制器,然后从菜单中选择“ 嵌入”。应该看起来像这样:
我的结果: