How to navigate to different storyboards along wit

2019-05-19 01:18发布

问题:

I am using third party control for sidemenu named : MMDrawerController, and m handling UI using multiple storyboards.let me come to the point my sidemenu looks like this : Sidemenu Image

Trying to achieve :

1)When I click on the Parent, "main.storyboard" should be displayed.

2)When I click on the Management, "management.storyboard" should be displayed.

same sidemenu should be displayed across all storyboard file.

I have tried some code by my own but m not getting the sidemenu on "management.storyboard" :(

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    switch(indexPath.row)
    {
    case 4:
        let mainstoryboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        var welview = mainstoryboard.instantiateViewController(withIdentifier: "WelcomeParentViewController") as! WelcomeParentViewController
        var welnav = UINavigationController(rootViewController: welview)
        var appdel : AppDelegate = UIApplication.shared.delegate as! AppDelegate

        appdel.centerContainer!.centerViewController = welnav
        appdel.centerContainer!.toggle(MMDrawerSide.left, animated: true, completion: nil)
        break
    case 5:
        let mainstoryboard : UIStoryboard = UIStoryboard(name: "Management-Storyboard", bundle: nil)
        var welview = mainstoryboard.instantiateViewController(withIdentifier: "ReportsViewController") as! ReportsViewController
        var welnav = UINavigationController(rootViewController: welview)
        var appdel : AppDelegate = UIApplication.shared.delegate as! AppDelegate

        appdel.centerContainer!.centerViewController = welnav
        appdel.centerContainer!.toggle(MMDrawerSide.left, animated: true, completion: nil)
        break
    default :
        break


    }

I want same sidemenu across all storyboard file.

how to accomplish the above feature.Please Help.Thank you in advance.

MMDrawerController Code inside the appdelegate.swift

import UIKit
import GoogleMaps

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?
var centerContainer : MMDrawerController?



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

    if isUserLoggedIn()
    {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        appDelegate.gotoMainvc()
    }
    else
    {
        let rootViewController = self.window!.rootViewController
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let setViewController = mainStoryboard.instantiateViewController(withIdentifier: "LoginViewController") as! LoginViewController
        rootViewController?.navigationController?.popToViewController(setViewController, animated: false)
    }
    return true
}

func isUserLoggedIn() -> Bool{
    if let accessToken = UserDefaults.standard.object(forKey: "access_token") as? String
    {
        if (accessToken.characters.count) > 0{
            return true
        } else {
            return false
        }

    }
    else {
        return false
    }
}
func gotoMainvc()
{

    var rootviewcontroller = self.window?.rootViewController

    if(UIDevice.current.userInterfaceIdiom == .phone)
    {

    let mainstoryboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

        var centerviewcontroller = mainstoryboard.instantiateViewController(withIdentifier: "WelcomeParentViewController") as! WelcomeParentViewController

        var leftsideviewcontroller = mainstoryboard.instantiateViewController(withIdentifier: "LeftSideMenuViewController") as! LeftSideMenuViewController
        let leftsidenav = UINavigationController(rootViewController: leftsideviewcontroller)
        let centernav = UINavigationController(rootViewController: centerviewcontroller)
        centerContainer = MMDrawerController(center: centernav, leftDrawerViewController: leftsidenav)

        centerContainer?.openDrawerGestureModeMask = MMOpenDrawerGestureMode.panningCenterView
        centerContainer?.closeDrawerGestureModeMask = MMCloseDrawerGestureMode.panningCenterView

        window?.rootViewController = centerContainer
        window?.makeKeyAndVisible()
    }
    else{

        let mainstoryboard2 : UIStoryboard = UIStoryboard(name: "Storyboard-iPad", bundle: nil)
        var centerviewcontroller = mainstoryboard2.instantiateViewController(withIdentifier: "WelcomeParentViewController") as! WelcomeParentViewController

        var leftsideviewcontroller = mainstoryboard2.instantiateViewController(withIdentifier: "LeftSideMenuViewController") as! LeftSideMenuViewController
        let leftsidenav = UINavigationController(rootViewController: leftsideviewcontroller)
        let centernav = UINavigationController(rootViewController: centerviewcontroller)
        centerContainer = MMDrawerController(center: centernav, leftDrawerViewController: leftsidenav)

        centerContainer?.openDrawerGestureModeMask = MMOpenDrawerGestureMode.panningCenterView
        centerContainer?.closeDrawerGestureModeMask = MMCloseDrawerGestureMode.panningCenterView

        window?.rootViewController = centerContainer
        window?.makeKeyAndVisible()
    }

}


//MARK: sharedDelegate

 func sharedDelegate() -> AppDelegate

{
    return UIApplication.shared.delegate as! AppDelegate
}


 }

回答1:

here is code open side from other storyboard

 @IBAction func menutapped(_ sender: Any) {

        var appdelegate: AppDelegate = UIApplication.shared.delegate as! AppDelegate
        appdelegate.centerContainer?.toggle(MMDrawerSide.left, animated: true, completion: nil)


    }


回答2:

Main View Controller

import UIKit

class ViewController: UIViewController , UICollectionViewDelegate , UICollectionViewDataSource , UIGestureRecognizerDelegate {

    @IBOutlet weak var collectioncell: UICollectionView!
    var objectProfile:SideMenuViewController!
    var tapGesture = UITapGestureRecognizer()

       override func viewDidLoad() {

        super.viewDidLoad()


        tapGesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.myviewTapped(_:)))
        tapGesture.numberOfTapsRequired = 1
        tapGesture.numberOfTouchesRequired = 1
        collectioncell.addGestureRecognizer(tapGesture)
        collectioncell.isUserInteractionEnabled = true
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        self.objectProfile = storyboard.instantiateViewController(withIdentifier: "SideMenuViewController") as! SideMenuViewController

        self.objectProfile.view.frame = CGRect(x:  -(self.view.frame.size.width - 40), y: 0, width: self.view.frame.size.width - 40, height: self.view.frame.size.height)
        self.view.addSubview(self.objectProfile.view)
        self.navigationController?.didMove(toParentViewController: self.objectProfile)

        self.collectioncell.layer.cornerRadius = 5.0
        self.collectioncell.layer.borderWidth = 5.0
        self.collectioncell.clipsToBounds = true
        self.collectioncell.layer.borderColor = UIColor.clear.cgColor
        self.collectioncell.layer.masksToBounds = true


    }
    func myviewTapped(_ sender: UITapGestureRecognizer) {

        if self.objectProfile.view.isHidden == false {
            UIView.animate(withDuration: 0.3)
            {
                self.objectProfile.view.frame = CGRect(x:  -(self.view.frame.size.width - 90), y: 0, width: self.view.frame.size.width - 90, height: self.view.frame.size.height)
            }
        }
    }


    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    @IBAction func Mrnupressed(_ sender: UIBarButtonItem) {
        UIView.animate(withDuration: 0.3)
        {
            self.objectProfile.view.frame = CGRect(x: 0  , y: 0, width: (self.view.frame.size.width - 100), height: self.view.frame.size.height)
        }

    }


    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
    {
        return 6
    }
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
    {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionCell", for: indexPath) as! MainCollectionViewCell
        return cell
    }
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: IndexPath) -> CGSize {

        let cellsize = CGSize(width: (collectioncell.bounds.size.width/2) - 12, height:(collectioncell.bounds.size.height/3) - 20)

        return cellsize
    }






}

Child View Controller

import UIKit

class SideMenuViewController: UIViewController,UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var sidemenutable: UITableView!
    var stri:String!
    var ArrarMenu:[String] = ["Home","SiteMep","Student","About Us","Help"]
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return ArrarMenu.count
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "SideMenuCell") as! SideMenuTableViewCell
        let objarray = ArrarMenu[indexPath.row]
        cell.lblitem.text = objarray
        stri = objarray
        return cell
    }
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        if indexPath.row == 0{
            self.performSegue(withIdentifier: "SegueForHome", sender: self)
        }
    }

}

In This Code I Am use Child View As Side Manu Controller