繁体   English   中英

没有情节提要的Swift SWRevealController

[英]Swift SWRevealController without storyboard

我用情节提要实现了SWRevealController ,并且一切正常,但是现在我想在没有情节提要的情况下对应用程序进行编程。

有人可以帮我实施吗? 我有一个FrontViewController和一个MenuViewController。 为此,我是否需要一个额外的SWRevealViewController?如果是,我必须编写什么代码?

我知道在SWRevealController上有一些信息,但是它在Objective-C中,并且在Swift 2.0中编写时遇到一些问题。

您可以按照以下步骤进行操作。

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!;
}

application:didFinishLaunchingWithOptions:调用createSlidingMenu ,您就可以开始了。

这对我有用(迅速3.1)

  1. 在StoryBoard中,创建MasterViewController,带有StoryboardId“ HomeViewController”的HomeViewController(嵌入在UINavigationController中)和带有StoryboardId“ MenuViewController”的MenuViewController(嵌入在UINavigationController中)。 在此处输入图片说明
  2. 在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. 或者,您可以省略MasterViewController并:

    • 在AppDelegate中实现SWRevealViewControllerDelegate并
    • 复制上面在application:didFinishLaunchingWithOptions中编写的viewDidLoad主体的代码:

除了Hitendra,我还修改了以下代码,以便可以将导航置于Home中

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,当用户单击登录按钮时

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

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