简体   繁体   English

没有情节提要的Swift SWRevealController

[英]Swift SWRevealController without storyboard

I implemented SWRevealController with storyboard and everything works great, but now I would like to program the app without storyboard. 我用情节提要实现了SWRevealController ,并且一切正常,但是现在我想在没有情节提要的情况下对应用程序进行编程。

Can someone help me with the implementation? 有人可以帮我实施吗? I have a FrontViewController and a MenuViewController. 我有一个FrontViewController和一个MenuViewController。 Do I need an extra SWRevealViewController for this and if yes, what do I have to code? 为此,我是否需要一个额外的SWRevealViewController?如果是,我必须编写什么代码?

I know there is some information on SWRevealController but it is in Objective-C and I have some problems to write this in Swift 2.0. 我知道在SWRevealController上有一些信息,但是它在Objective-C中,并且在Swift 2.0中编写时遇到一些问题。

You can do it as follow. 您可以按照以下步骤进行操作。

Create one function createSlidingMenu in appDelegate. createSlidingMenu中创建一个函数createSlidingMenu

func createSlidingMenu(){

        let frontViewController = //create instance of frontVC
        let rearViewController  = //create instance of rearVC(menuVC)


        //create instance of swRevealVC based on front and rear VC
        let swRevealVC = SWRevealViewController(rearViewController: rearViewController, frontViewController: frontViewController);
        swRevealVC.toggleAnimationType = SWRevealToggleAnimationType.EaseOut;
        swRevealVC.toggleAnimationDuration = 0.30;

        //set swRevealVC as rootVC of windows
        self.window?.rootViewController = swRevealVC!;
}

call createSlidingMenu in application:didFinishLaunchingWithOptions: and you are good to go. application:didFinishLaunchingWithOptions:调用createSlidingMenu ,您就可以开始了。

This worked for me (in swift 3.1) 这对我有用(迅速3.1)

  1. In the StoryBoard create MasterViewController, HomeViewController (embedded in UINavigationController) with storyboardId "HomeViewController", and MenuViewController (embedded in UINavigationController) with storyboardId "MenuViewController". 在StoryBoard中,创建MasterViewController,带有StoryboardId“ HomeViewController”的HomeViewController(嵌入在UINavigationController中)和带有StoryboardId“ MenuViewController”的MenuViewController(嵌入在UINavigationController中)。 在此处输入图片说明
  2. Create MasterViewController class and associate to UIViewController (MasterViewController) in Storyboard and implements SWRevealViewControllerDelegate protocol (see code) 在Storyboard中创建MasterViewController类并与UIViewController(MasterViewController)关联,并实现SWRevealViewControllerDelegate协议(请参见代码)

     import UIKit class MasterViewController: UIViewController, SWRevealViewControllerDelegate { override func viewDidLoad() { super.viewDidLoad() let frontNavigationController:UINavigationController let rearNavigationController:UINavigationController let revealController = SWRevealViewController() var mainRevealController = SWRevealViewController() let menuTable = self.storyboard?.instantiateViewController(withIdentifier: "MenuViewController")as! MenuViewController let homepage = self.storyboard?.instantiateViewController(withIdentifier: "HomeViewController") as! HomeViewController frontNavigationController = UINavigationController(rootViewController: homepage) rearNavigationController = UINavigationController(rootViewController: menuTable) rearNavigationController.setNavigationBarHidden(true, animated: false) revealController.frontViewController = frontNavigationController revealController.rearViewController = rearNavigationController revealController.delegate = self mainRevealController = revealController UIApplication.shared.delegate!.window?.rootViewController = mainRevealController } 

    } }

  3. As alternative you could omit MasterViewController and: 或者,您可以省略MasterViewController并:

    • implement SWRevealViewControllerDelegate in AppDelegate and 在AppDelegate中实现SWRevealViewControllerDelegate并
    • copy the code of viewDidLoad body wrote above in application:didFinishLaunchingWithOptions: 复制上面在application:didFinishLaunchingWithOptions中编写的viewDidLoad主体的代码:

In addition to Hitendra, I modify the following code so I can put navigation in Home 除了Hitendra,我还修改了以下代码,以便可以将导航置于Home中

AppDelegate.swift AppDelegate.swift

func toHome() {
    let frontViewController = HomeController()//create instance of frontVC
    let rearViewController  = MenuController() //create instance of rearVC(menuVC)

    let swRevealVC = SWRevealViewController(rearViewController: rearViewController, frontViewController: frontViewController);
    swRevealVC?.toggleAnimationType = SWRevealToggleAnimationType.easeOut;
    swRevealVC?.toggleAnimationDuration = 0.30;

    navigationController = UINavigationController(rootViewController: swRevealVC!)
    self.window?.rootViewController = navigationController
}

LoginController.swift, when user click login button LoginController.swift,当用户单击登录按钮时

@objc private func login() {
     let appDelegate = UIApplication.shared.delegate as! AppDelegate
     appDelegate.toHome()
     return
}

HomeController.swift HomeController.swift

override func viewDidLoad() {
    super.viewDidLoad()

    setupLayout() // layout programmatically, I didn't put code here

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

}

@objc private func menu() {
    revealViewController().revealToggle(self)
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM