iOS共享扩展与自定义视图控制器

时间:2017-10-11 20:19:33

标签: ios swift share-extension

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

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

显而易见的问题是,在推送自定义控件之前,我仍然可以看到默认的View Controller。 那么问题是如何在共享扩展启动时立即显示我的自定义UI?我在.plist中尝试过 NSExtensionPrincipalClass ,但没有任何正面结果

提前致谢

3 个答案:

答案 0 :(得分:2)

嗯,挖掘和搜索更多我发现我必须使 ShareViewController 成为 UIViewController 的子类而不是** SLComposeServiceViewController **。当我在故事板上设计我的界面时,我按原样离开了.plist,但是必须考虑到VC在这里描述的全屏问题:iOS 8 Share Extension custom view controller size

我在那里接受@Dale答案来解决它。

答案 1 :(得分:0)

这些常规步骤对我有用,而无需使用SLComposeServiceViewControllerhere's the code at the commit when it was implemented)。最后的图片显示了我们的结果,但是第6步可以是任何内容,而不仅仅是表格。

步骤

  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

答案 2 :(得分:0)

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

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