12

我正在创建一个共享扩展程序以允许将 Youtube 视频共享到我的应用程序中,并且很难顺利地呈现我的自定义 UI。而不是只包含原始 Youtube URL 的默认视图控制器,我想做一些视觉上类似于 Facebook 扩展的事情,显示缩略图和视频标题。我的第一次尝试是编辑 MainInterface 故事板 ShareViewController,但这样做会简要显示我的自定义界面,并且会被默认 UI 布局“覆盖”。所以我最终将另一个带有我的 UI 的视图控制器添加到情节提要中,并在我添加的 ShareViewController 中

override func presentationAnimationDidFinish() {
    super.presentationAnimationDidFinish()
    DispatchQueue.main.async {
        self.pushConfigurationViewController(customVC)
    }

这个问题显然是在我的自定义视图控制器被推送之前我仍然可以看到默认视图控制器。所以问题是如何在共享扩展启动时立即显示我的自定义 UI?我已经在 .plist 中尝试了NSExtensionPrincipalClass但没有任何积极的结果

提前致谢

4

3 回答 3

19

这些一般步骤对我有用,而无需使用SLComposeServiceViewController这是实现时提交的代码)。最后的图像显示了我们的结果,但第 6 步可以是任何东西,而不仅仅是表格。

步骤

  1. 代码ShareViewController改为简单UIViewController

  2. 代码)添加模糊效果ShareViewController

  3. 故事板)将容器视图添加到ShareViewController

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

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

  6. 在导航控制器中自定义视图控制器(例如,参见这个 SO 线程


步骤 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对象库中的 a 拖到ShareViewController情节提要上,并调整尺寸。例如:

在此处输入图像描述

步骤 4. 添加导航控制器

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

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

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

在此处输入图像描述

第 6 步。在导航控制器中自定义视图控制器(例如,参见这个 SO 线程

我的结果:

在此处输入图像描述

于 2018-11-28T23:24:50.557 回答
5

好吧,挖掘和搜索更多我发现我必须使我的ShareViewController成为UIViewController的子类,而不是** SLComposeServiceViewController**。当我在情节提要上设计界面时,我保留了 .plist 原样,但必须考虑到此处描述的 VC 全屏问题:iOS 8 Share Extension custom view controller size

我在那里解决了@Dale 的答案。

于 2017-10-12T13:52:42.433 回答
1

根据 Apple 的说法,您可以在创建扩展时简单地停用默认 VC。请参阅“使用 Xcode 共享模板”部分下的注释。

https://developer.apple.com/library/archive/documentation/General/Conceptual/ExtensibilityPG/Share.html

于 2019-10-02T18:41:08.183 回答