2016-12-05 24 views
1

,因为我们知道,实现PageTabBarController,我们需要在AppDelegate.swift插入这些代码:Cosmicmind/Material:我如何在不使用AppDelegate.swift的情况下实现PageTabBarController?

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) { 

    } 
} 

回答

0

Linked GitHub Question

嗨,是有一种方法。 UIViewController`,它允许你将它作为任何其他UIViewController的子项添加。那就是说,你给了我一个好主意。我将创建一个新的UIViewController,它允许您添加尽可能多的子UIViewControllers,这将使这非常容易。我会将其作为功能请求

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

+0

感谢,我真的很熟悉添加的UIViewController作为一个孩子的控制器,但我必须找出另一种替代方案来实现的TabBar(使用的CollectionView )用于容器视图的标题和UIPageViewController –

+0

只要您有解决方案,就可以了。我目前正在重构PageTabBarController,所以如果你有任何进一步的建议或问题,请让我知道,谢谢:) – CosmicMind

0

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

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

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