swift3 - 如何在 swift 3 中通过侧菜单导航到不同的 Storyboard

标签 swift3 uistoryboard side-menu

我正在为名为:MMDrawerController 的侧菜单使用第三方控件,并使用多个 Storyboard处理 UI。让我来看看我的侧菜单如下所示:Sidemenu Image

尝试实现:

1)当我点击Parent时,应该显示“main.storyboard”。

2)当我点击管理时,应该显示“management.storyboard”。

所有 Storyboard文件中应显示相同的侧边菜单。

我自己尝试了一些代码,但没有在“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


    }

我希望所有 Storyboard文件都有相同的侧边菜单。

如何实现上述功能。请帮忙。先谢谢您。

copy bundle resources screenshot

appdelegate.swift 内的 MMDrawerController 代码

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
}


 }

最佳答案

主视图 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
    }






}

subview 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)
        }
    }

}

在此代码中,我使用 subview 作为侧面手动 Controller

enter image description here

关于swift3 - 如何在 swift 3 中通过侧菜单导航到不同的 Storyboard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45436010/

相关文章:

android - 如何在 Android 中的 navigationView 上显示 Activity 或 fragment ?

ios - 加载时在 UITableView 底部添加一个 ActivityIndi​​cator

ios - Shell 脚本调用错误 : no such file or directory in xcode 8 with swift 3

ios - 使用 Swift 自定义 UIStoryboard

swift - 通过点击任意位置关闭侧边菜单

react-native - 如何使用 react-native 创建侧边菜单?

swift - 函数声明中的for循环

swift - 列出 SendBird 应用程序中可用的所有 channel

ios - UIstoryboard:Modal segues 的 Animates 选项在 6.0 之前的 iOS 版本上不可用

ios - Storyboard和 UITabBarController