具有自定义View Controller的iOS共享扩展

lea*_*rco 9 ios swift share-extension

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

override func presentationAnimationDidFinish() {
    super.presentationAnimationDidFinish()
    DispatchQueue.main.async {
        self.pushConfigurationViewController(customVC)
    }
Run Code Online (Sandbox Code Playgroud)

显然,这样做的问题在于,在推送自定义控件之前,我仍然可以看到默认的View Controller。因此,问题将是启动共享扩展名后如何立即显示我的自定义UI?我已经在.plist中尝试了NSExtensionPrincipalClass,但是没有任何积极的结果

提前致谢

tor*_*tte 10

这些常规步骤无需使用即可为我工作SLComposeServiceViewController这是实现时的提交代码)。最后的图像显示了我们的结果,但是第6步可以是任何内容,而不仅仅是表格。

步骤

  1. 代码)更改ShareViewController为简单UIViewController

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

  3. 情节提要)将容器视图添加到ShareViewController

  4. 情节提要)添加导航控制器

  5. 情节提要)在ShareViewController容器视图中嵌入导航控制器

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


步骤1.更改ShareViewController为简单UIViewController

import UIKit

class ShareViewController: UIViewController {
//                         ^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

第2步。添加模糊效果 ShareViewController

    // ShareViewController continued from Step 1.

    override func viewDidLoad() {
        super.viewDidLoad()

        // /sf/ask/1192916861/

        // 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.
    }
Run Code Online (Sandbox Code Playgroud)

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

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

在此处输入图片说明

步骤4.添加导航控制器

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

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

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

在此处输入图片说明

步骤6.在导航控制器中自定义视图控制器(例如,请参见此SO线程

我的结果:

在此处输入图片说明


lea*_*rco 5

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

我在那里接受了@Dale 的回答来解决它。