1

众所周知,要实现 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) {

  }
}
4

2 回答 2

0

首先创建 AppToolbarController(ToolbarController 的子类)或者你可以使用 Material library demo 中的那个。

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

DispatchQueue.main.async {
let tabbarViewController = AppPageTabbarController(viewControllers: [vc1,vc2,vc3], selectedIndex: 0)
self.present(AppToolbarController(rootViewontroller: tabbarViewController))
}
于 2016-12-21T18:30:31.477 回答
0

链接的 GitHub 问题

嗨,是的,有办法。UIViewController`,允许您将PageTabBarController is inherited from a其添加为任何其他 UIViewController 的子项。也就是说,你给了我一个好主意。我将制作一个新的 UIViewController,它允许您添加尽可能多的子 UIViewController,这将使这非常容易做到。我将把它作为一个功能请求

在更新之前,请使用建议的方法将其添加为子 UIViewController。你熟悉如何做到这一点吗?

于 2016-12-19T16:14:34.370 回答