【问题标题】:Create slide menu using SWReavealController with TabbarViewController programmatically - swift以编程方式使用带有 TabbarViewController 的 SWRavealController 创建幻灯片菜单 - swift
【发布时间】:2018-12-19 01:50:58
【问题描述】:

我正在创建一个包含TabBarViewController 的示例应用程序,并且我使用SWRevealViewController 实现了幻灯片菜单,问题是它没有显示幻灯片菜单。

这里我在appdelegate中设置了rootViewController

 window = UIWindow(frame: UIScreen.main.bounds)

 window?.makeKeyAndVisible()

 window?.rootViewController = TabBarController()

这是我的TabBarController,我实现了 2 个 tabBar 项,第一个 tabBar 项应该有滑动菜单

    let homeController = HomeController()
    let homeNavigation = UINavigationController(rootViewController: homeController)
    homeNavigation.tabBarItem.title = "Home"
    let menuController = MenuViewController()
    let swReveal = SWRevealViewController(rearViewController: homeNavigation, frontViewController: menuController)
    swReveal?.toggleAnimationType = SWRevealToggleAnimationType.easeOut
    swReveal?.toggleAnimationDuration = 0.30

    let favController = FavoriteController()
    let favNavigation = UINavigationController(rootViewController: favController)
    favNavigation.tabBarItem.title = "Favorite"
    viewControllers = [homeNavigation, favNavigation]

对于MenuController,我设置了一些导航按钮来显示菜单

    let menuButton = UIBarButtonItem(title: "Menu", style: .plain, target: self.revealViewController(), action: #selector(slideMenu))
    self.navigationItem.leftBarButtonItem = menuButton
@objc func slideMenu() {

    if revealViewController() != nil {
        revealViewController().revealToggle(animated: true)
        revealViewController().rearViewRevealWidth = (view.bounds.width * 80 ) / 100
    }
    else {
        print("no reveal view")
    }
}

【问题讨论】:

  • 可以分享演示项目吗?
  • @DharmeshKheni 这里先生github.com/SamboVisal/TabbarWithSlideMenu
  • 从您的项目实施未正确完成。您需要遵循本教程。 appcoda.com/sidebar-menu-swift
  • 哦。在本教程中使用非常有用的故事板进行解释。但是你能提到我在与你分享的演示项目中的错误吗?
  • 好的,将其作为答案发布。

标签: ios swift uitabbarcontroller tabbar swrevealviewcontroller


【解决方案1】:

您需要在didFinishLaunchingWithOptions方法中配置SWRevealViewController,如下所示:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    let frontNavigationController:UINavigationController
    let rearNavigationController:UINavigationController
    let revealController = SWRevealViewController()
    var mainRevealController = SWRevealViewController()

    frontNavigationController =  UINavigationController(rootViewController: TabBarController())
    rearNavigationController = UINavigationController(rootViewController: MenuViewController())

    frontNavigationController.navigationBar.isHidden = true
    rearNavigationController.navigationBar.isHidden = true

    revealController.frontViewController = frontNavigationController
    revealController.rearViewController = rearNavigationController
    revealController.delegate = self
    mainRevealController  = revealController

    window = UIWindow(frame: UIScreen.main.bounds)
    self.window?.rootViewController = mainRevealController
    self.window?.makeKeyAndVisible()

    return true
}

并在你的HomeController 替换

let menuButton = UIBarButtonItem(title: "Menu", style: .plain, target: self.revealViewController(), action: #selector(slideMenu))

let menuButton = UIBarButtonItem(title: "Menu", style: .plain, target: self, action: #selector(slideMenu))

并删除

let menuController = MenuViewController()
let swReveal = SWRevealViewController(rearViewController: homeNavigation, frontViewController: menuController)
swReveal?.toggleAnimationType = SWRevealToggleAnimationType.easeOut
swReveal?.toggleAnimationDuration = 0.30

来自您的TabBarController,您的最终代码将是:

func customTabbar (){

    let homeController = HomeController()
    let homeNavigation = UINavigationController(rootViewController: homeController)
    homeNavigation.tabBarItem.title = "Home"

    let favController = FavoriteController()
    let favNavigation = UINavigationController(rootViewController: favController)
    favNavigation.tabBarItem.title = "Favorite"

    let servicePhoneCollectionFLowLayoutInstance = UICollectionViewFlowLayout()
    let serviceTabbarFlowLayoutInit = ExploreController(collectionViewLayout: servicePhoneCollectionFLowLayoutInstance)

    let exploreController = serviceTabbarFlowLayoutInit
    let exploreNavigation = UINavigationController(rootViewController: exploreController)
    exploreNavigation.tabBarItem.title = "Explore"


    let moreController = DetailViewController()
    let moreViewController = UINavigationController(rootViewController: moreController)
    moreViewController.tabBarItem.title = "Tools"
    viewControllers = [homeNavigation, favNavigation, exploreNavigation, moreViewController]
}

有关更多信息,请查看您更新的项目HERE

这是 SWRevealViewController with UINavigationController UITabBarController 的工作代码,作者:Storyboard (Swift 4)

https://stackoverflow.com/a/51725803/10150796

【讨论】:

  • 感谢您的美好时光。现在我对以编程方式制作幻灯片菜单有了一些想法。非常感谢...
  • 很久以后写这个。 :D 很高兴为您提供帮助。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多