簡體   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