【问题标题】:Cosmicmind/Material: How do i implement PageTabBarController without using AppDelegate.swift?Cosmicmind/Material:如何在不使用 AppDelegate.swift 的情况下实现 PageTabBarController?
【发布时间】:2016-12-05 09:23:15
【问题描述】:

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

  }
}

【问题讨论】:

    标签: swift3 xcode8 ios10 cosmicmind


    【解决方案1】:

    Linked GitHub Question

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

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

    【讨论】:

    • 谢谢,我非常熟悉将 UIViewController 添加为子控制器,但我已经找到了另一种替代方法来实现标题的 TabBar(使用 CollectionView)和容器视图的 UIPageViewController
    • 啊好吧...只要你有解决方案。我目前正在重构 PageTabBarController,所以如果您有任何进一步的建议或问题,请告诉我,谢谢 :)
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      • 1970-01-01
      • 2019-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多