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