首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cosmicmind/Material:如何在不使用AppDelegate.swift的情况下实现PageTabBarController?

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

Stack Overflow用户
提问于 2016-12-05 17:23:16
回答 2查看 545关注 0票数 1

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

代码语言:javascript
复制
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

代码语言:javascript
复制
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) {

  }
}
EN

回答 2

Stack Overflow用户

发布于 2016-12-20 00:14:34

Linked GitHub Question

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

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

票数 0
EN

Stack Overflow用户

发布于 2016-12-22 02:30:31

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

然后在你的视图控制器中,你可以使用:

代码语言:javascript
复制
DispatchQueue.main.async {
let tabbarViewController = AppPageTabbarController(viewControllers: [vc1,vc2,vc3], selectedIndex: 0)
self.present(AppToolbarController(rootViewontroller: tabbarViewController))
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40970879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档