Swift3 Cosmicmind/Material:如何在不使用AppDelegate.swift的情况下实现PageTabBarController?

Swift3 Cosmicmind/Material:如何在不使用AppDelegate.swift的情况下实现PageTabBarController?,swift3,xcode8,ios10,cosmicmind,Swift3,Xcode8,Ios10,Cosmicmind,众所周知,要实现PageTabBarController,我们需要在AppDelegate.swift中插入以下代码: func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: let viewControllers = [MatchDetailViewController(),ListPlayersViewController(),ChatViewContro

众所周知,要实现PageTabBarController,我们需要在AppDelegate.swift中插入以下代码:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: 
    let viewControllers = [MatchDetailViewController(),ListPlayersViewController(),ChatViewController()]

    window = UIWindow(frame: Device.bounds)
    window!.rootViewController = MatchViewController(viewControllers: viewControllers, selectedIndex: 0)
    window!.makeKeyAndVisible()
}
现在,当我想打开匹配数据的详细信息时,我需要使用PageTabBarController。我的问题是,如何实现它而不在AppDelegate.swift中插入这些代码,因为它将在第一次应用程序启动时打开我的MatchViewController(从PageTabBarController扩展)

我已经尝试过这段代码,但它会导致崩溃,它指向了我的AppDelegate.swift

class MatchViewController: PageTabBarController {
    var window: UIWindow?

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}

open override func prepare() {
    super.prepare()
    let viewControllers = [MatchDetailViewController(),ListPlayersViewController(),ChatViewController()]
    //1st try: Crash
    window = UIWindow(frame: Device.bounds)
    window!.rootViewController = MatchViewController(viewControllers: viewControllers, selectedIndex: 0)
    window!.makeKeyAndVisible()

    //2nd try: error
    self.rootViewController = MatchViewController(viewControllers: viewControllers, selectedIndex: 0)

    //3rd try: crash
    self.viewControllers = viewControllers

    delegate = self
    preparePageTabBar()
}

fileprivate func preparePageTabBar() {
    pageTabBar.lineColor = Color.blue.base        
    pageTabBar.dividerColor = Color.blueGrey.lighten5

    pageTabBarAlignment = PageTabBarAlignment.top
    pageTabBar.lineAlignment = TabBarLineAlignment.bottom

}
}

extension MatchViewController: PageTabBarControllerDelegate {
func pageTabBarController(_ pageTabBarController: PageTabBarController, didTransitionTo viewController: UIViewController) {

  }
}

嗨,是的,有办法。
PageTabBarController继承自
UIViewController`,您可以将其添加为任何其他UIViewController的子级。也就是说,你给了我一个好主意。我将制作一个新的UIViewController,它允许您添加尽可能多的子UIViewController,这将使这项工作非常容易。我将此作为功能请求

在更新之前,请使用建议的方法将其添加为子UIViewController。你熟悉怎么做吗

嗨,是的,有办法。
PageTabBarController继承自
UIViewController`,您可以将其添加为任何其他UIViewController的子级。也就是说,你给了我一个好主意。我将制作一个新的UIViewController,它允许您添加尽可能多的子UIViewController,这将使这项工作非常容易。我将此作为功能请求


在更新之前,请使用建议的方法将其添加为子UIViewController。你熟悉怎么做吗

首先创建AppToolbarController(ToolbarController的子类),也可以使用材质库演示中的一个

然后从视图控制器中,可以使用:

DispatchQueue.main.async {
let tabbarViewController = AppPageTabbarController(viewControllers: [vc1,vc2,vc3], selectedIndex: 0)
self.present(AppToolbarController(rootViewontroller: tabbarViewController))
}

首先创建AppToolbarController(ToolbarController的子类),也可以使用材质库演示中的一个

然后从视图控制器中,可以使用:

DispatchQueue.main.async {
let tabbarViewController = AppPageTabbarController(viewControllers: [vc1,vc2,vc3], selectedIndex: 0)
self.present(AppToolbarController(rootViewontroller: tabbarViewController))
}

谢谢,我非常熟悉将UIViewController添加为子控制器,但我已经找到了另一种替代方法来实现标题的TabBar(使用CollectionView)和容器视图的UIPageViewController。好的。。。只要你有解决办法。我目前正在重构PageTabBarController,因此如果您有任何进一步的建议或问题,请告诉我,谢谢:)谢谢,我非常熟悉将UIViewController添加为子控制器,但我已经找到了实现TabBar的其他替代方案(使用CollectionView)对于容器viewAh的标题和UIPageViewController好的。。。只要你有解决办法。我目前正在重构PageTabBarController,因此如果您有任何进一步的建议或问题,请让我知道,谢谢:)