Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有自定义视图控制器的iOS共享扩展_Ios_Swift_Share Extension - Fatal编程技术网

具有自定义视图控制器的iOS共享扩展

具有自定义视图控制器的iOS共享扩展,ios,swift,share-extension,Ios,Swift,Share Extension,我正在创建一个共享扩展,允许将Youtube视频共享到我的应用程序中,我很难顺利地呈现我的自定义UI。我不想使用默认的视图控制器,它只包含原始的Youtube URL,我想做一些视觉上类似于Facebook扩展的事情,显示缩略图和视频标题。 我的第一次尝试是编辑MainInterface storyboard ShareViewController,但这样做会简要显示我的自定义界面和ThetGet的默认UI布局“覆盖”。因此,我最终在故事板和我添加的ShareViewController中添加了

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

override func presentationanimationdidfish(){
super.presentationanimationdidfish()
DispatchQueue.main.async{
self.pushConfigurationViewController(customVC)
}
很明显,问题是在推送自定义视图控制器之前,我仍然可以看到默认视图控制器。 因此,问题是如何在启动共享扩展时立即显示自定义UI?我在.plist中尝试了NSExtensionPrincipalClass,但没有任何积极的结果


提前感谢

好吧,再多挖掘和搜索一下,我发现我必须将我的ShareViewController变成UIViewController的子类,而不是**SLComposeService ViewController**。在故事板上设计界面时,我保留了.plist,但必须考虑到V的问题C此处描述的全屏显示:


我用@Dale-answer解决了这个问题。

这些常规步骤对我来说很有效,没有使用
SLComposeServiceViewController
()。最后的图像显示了我们的结果,但是步骤6可以是任何东西,而不仅仅是一种形式

步骤

  • (代码)将
    ShareViewController
    更改为简单
    UIViewController

  • (代码)将模糊效果添加到
    ShareViewController

  • (情节提要)将容器视图添加到
    ShareViewController

  • (情节提要)添加导航控制器

  • (情节提要)将导航控制器嵌入到
    ShareViewController
    的容器视图中

  • 自定义导航控制器中的视图控制器(请参见示例)


  • 步骤1.将
    ShareViewController
    更改为简单
    UIViewController
    步骤2.将模糊效果添加到
    ShareViewController
    步骤3.将容器视图添加到
    ShareViewController
    容器视图
    从对象库拖动到情节提要上的
    共享视图控制器
    ,然后调整维度。例如:

    步骤4.添加导航控制器 将导航控制器从对象库拖动到情节提要

    步骤5.在
    ShareViewController
    的容器视图中嵌入导航控制器 从
    ShareViewController
    的容器视图拖动控件到导航控制器,从菜单中选择“嵌入”。外观应类似于此:

    步骤6.自定义导航控制器中的视图控制器(参见示例) 我的结果是:


    根据苹果公司的说法,创建扩展后,您只需停用默认VC即可。请参阅“使用Xcode共享模板”部分下的说明

    import UIKit
    
    class ShareViewController: UIViewController {
    //                         ^^^^^^^^^^^^^^^^
    
        // 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.
        }