Ios 如何从AppDelegate实例化多个视图控制器?
有一个容器视图,其中包含3个视图控制器(V1、V2和V3)。我可以通过向左或向右滑动从A、B或C切换。A或B都包含自己的集合视图。如果我点击A或B内集合视图中的任何单元格,PlayerVC(上图中的名为Player^^)将启动,并开始使用AVPlayer播放视频 问题是:由于我使用的是通用链接,用户直接进入playerView播放视频,但当他们按下“完成”按钮时,应用程序崩溃。我认为问题在于视图控制器上的其余部分没有初始化?如何初始化容器视图和其他视图控制器?或者,如果这不是问题,请让我知道问题是什么 下面是带有一些示例代码的应用程序委托。如果可能,请提供代码帮助Ios 如何从AppDelegate实例化多个视图控制器?,ios,swift,uiviewcontroller,initialization,appdelegate,Ios,Swift,Uiviewcontroller,Initialization,Appdelegate,有一个容器视图,其中包含3个视图控制器(V1、V2和V3)。我可以通过向左或向右滑动从A、B或C切换。A或B都包含自己的集合视图。如果我点击A或B内集合视图中的任何单元格,PlayerVC(上图中的名为Player^^)将启动,并开始使用AVPlayer播放视频 问题是:由于我使用的是通用链接,用户直接进入playerView播放视频,但当他们按下“完成”按钮时,应用程序崩溃。我认为问题在于视图控制器上的其余部分没有初始化?如何初始化容器视图和其他视图控制器?或者,如果这不是问题,请让我知道问题
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
if let pagingViewController = window?.rootViewController as? PagingViewController {
pagingViewController.videoPlaybackManager = videoPlaybackManager
}
return true
}
class AppDelegate: UIResponder, UIApplicationDelegate {
// Other App Delegate methods.....
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
// 1) Make sure the passed `user activity` has expected characteristics.
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL else {
return false
}
// HELP: I need to get to `PlayerVC` from here?
return true
// If we can't do the above we default to opening the page in safari
}
}
编辑-如何在PagingViewController(容器视图)中实例化3个VCs的附加代码
如果您正在处理
UIPageViewController
,要设置正确的子级UIViewController
,您可以:
// In PagingViewController
func loadChildViewControllerFromUniversalLink(myParameter: Bool) {
// The condition you need to satisfied in order to present
// the correct child view controller
if myParameter { // is satisfied
let universalLinkVc = MyChildViewController() // load your VC here
let direction : UIPageViewControllerNavigationDirection = .forward // or .reverse, as you wish
self.setViewControllers([universalLinkVc], direction: direction, animated: animated, completion: nil)
}
}
然后在AppDelegate
的应用程序中(u应用程序:UIApplication,continue用户活动:NSUserActivity,restorationHandler:@escaping([Any]?)->Void)->Bool
:
myPagingViewControllerInstance.loadChildViewControllerFromUniversalLink(true)
您通常如何初始化容器VC?这不是在
didLaunchWithOptions
中吗?嘿,我只是在我的示例中添加了更多的代码来展示它是如何完成的。谢谢,ContainerVC实际上是通过故事板初始化的。你好,Felipe。我没有使用UIPageViewController,而是使用名为PagingViewController的VC,它充当V1、V2和V3的容器视图。然后我在那里实例化了所有3个Vc。请看一看我添加的附加代码,如果可能,请相应地修改您的代码。谢谢你的帮助!!
myPagingViewControllerInstance.loadChildViewControllerFromUniversalLink(true)