共享扩展 - 删除文本字段

时间:2017-10-06 12:53:22

标签: ios swift

有没有办法从我的ShareExtention中删除以RED标记的TextView-和PreviewPart?

我使用默认值:

class ShareViewController: SLComposeServiceViewController

作为ViewController

我想只显示下面的目的地选择器(我知道如何创建) 我知道您可以创建自己的ViewController,但重建默认的ViewController非常困难。

第二件事是: 您建议使用什么方法来传输/复制数据/文件以及阅读主应用程序的文档目录?

我想将所选文档传输/复制到我的主应用程序的DocumentsDirectory中。两者都在同一个AppGroup中。如果我只是在UserDefault中保存当前Document的Url,那么我猜主应用程序无法访问它。

我需要阅读主应用程序的文档目录,因为我需要文件层次结构,所以我可以选择保存位置。

  

注意:因为无论出于何种原因,评论中存在一些混淆:这是我自己的ShareExtention,而不是UIActivityController中的其他内容

Screenshot

3 个答案:

答案 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 []
    }

}

lol yahoo yahoo sucks

答案 1 :(得分:-1)

你不能。 当您使用共享扩展程序时,您将在之后选择要共享的应用程序,从而将自己插入到所述应用程序的共享扩展程序中。

您的应用没有,也无法访问所说的共享扩展程序,它们与主应用程序运行时完全分开。

此外,这允许用户自定义他们共享的内容。

对于帖子的第二部分,您需要详细说明,谁想要转移文档,您是开发者还是最终用户?

答案 2 :(得分:-1)

对我有用的是使用自定义解决方案而不是SLComposeServiceViewController。它看起来相同,并且可以添加我想要的任何元素(请参见末尾的图片和here's the code at the commit when it was implemented)。

步骤

  1. code )将ShareViewController更改为简单的UIViewController

  2. code )为ShareViewController

  3. 添加模糊效果
  4. 故事板)将容器视图添加到ShareViewController

  5. 故事板)添加导航控制器

  6. 故事板)在ShareViewController的容器视图中嵌入导航控制器

  7. 在导航控制器中自定义视图控制器(例如,请参见this SO thread


步骤1。将ShareViewController更改为简单的UIViewController

import UIKit

class ShareViewController: UIViewController {
//                         ^^^^^^^^^^^^^^^^

步骤2。向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.
    }

步骤3。将容器视图添加到ShareViewController

从对象库中将Container View拖到情节提要中的ShareViewController中,然后调整尺寸。例如:

enter image description here

步骤4。添加导航控制器

将导航控制器从对象库拖到情节提要。

步骤5。将导航控制器嵌入ShareViewController的容器视图中

ShareViewController的容器视图中拖动到导航控制器,然后从菜单中选择“ 嵌入”。应该看起来像这样:

enter image description here

步骤6。在导航控制器中自定义视图控制器(例如,请参见this SO thread

我的结果:

enter image description here