2017-09-10 5 views
0

J'ai une vue de navigation qui, lorsqu'elle apparaît en tapant sur le menu du hamburger, s'ouvre sur la moitié de la page. Il a toujours les autres vues (le contrôleur de vue racine et ses enfants) en arrière-plan. Lorsqu'un utilisateur appuie sur la zone d'arrière-plan grisée où se trouvent les autres vues, il peut interagir avec ces vues et la page navigue en laissant la vue de navigation par-dessus. La vue Nav est utilisée à plusieurs endroits, j'ai donc besoin du code pour désactiver les interactions avec d'autres vues dans le Nav View Controller. Code ci-dessous.ENSideMenuNavController - Désactiver l'interaction avec toutes les autres vues

import UIKit 

class MenuNavViewController: ENSideMenuNavigationController, ENSideMenuDelegate { 

    var tabBar: ManagerTabViewController! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let sb = UIStoryboard(name: "iPhoneStoryboard", bundle: nil) 
     let menu = sb.instantiateViewController(withIdentifier: "MenuTableViewController") as! MenuTableViewController 
     menu.tabBar = self.tabBar 
     sideMenu = ENSideMenu(sourceView: self.view, menuViewController: menu, menuPosition: .left) 
     sideMenu?.bouncingEnabled = false 

     view.bringSubview(toFront: navigationBar) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


    // MARK: - ENSideMenu Delegate 
    func sideMenuWillOpen() { 
    } 

    func sideMenuWillClose() { 
    } 

    func sideMenuDidClose() { 

    } 

    func sideMenuDidOpen() { 

    } 
} 

Comment puis-je désactiver/activer l'interaction avec d'autres points de vue (ou au moins le point de vue il est lancé à partir) dans le NavViewController ci-dessus?

Répondre

0

J'ai trouvé la réponse dans le code ci-dessous. En regardant plus loin dans la classe ENSideMenuNavigationController, j'ai trouvé que la méthode "init" définissait les contrôleurs de vue correspondants sur "viewControllers" et implémentait le code ci-dessous qui donnait l'effet désiré. Toute autre suggestion pour une meilleure pratique/code serait toujours appréciée.

import UIKit 

class MenuNavViewController: ENSideMenuNavigationController, ENSideMenuDelegate { 

    var tabBar: ManagerTabViewController! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let sb = UIStoryboard(name: "iPhoneStoryboard", bundle: nil) 
     let menu = sb.instantiateViewController(withIdentifier: "MenuTableViewController") as! MenuTableViewController 
     menu.tabBar = self.tabBar 
     sideMenu = ENSideMenu(sourceView: self.view, menuViewController: menu, menuPosition: .left) 
     sideMenu?.bouncingEnabled = false 
     sideMenu?.delegate = self 


     view.bringSubview(toFront: navigationBar) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


    // MARK: - ENSideMenu Delegate 
    func sideMenuWillOpen() { 

    } 

    func sideMenuWillClose() { 
    } 

    func sideMenuDidClose() { 
     // Enable interaction with other views again 
     for viewController in self.viewControllers { 
      viewController.view.isUserInteractionEnabled = true 
     } 
    } 

    func sideMenuDidOpen() { 
     // Disable interaction with other views 
     for viewController in self.viewControllers { 
      viewController.view.isUserInteractionEnabled = false 
     } 
    } 
} 

+0

Accepter la réponse – Vinodh

+0

Vous ne pouvez pas accepter votre propre réponse pendant 2-3 jours, il faudra donc attendre. Il pourrait même y avoir une meilleure réponse d'ici là. Je vais certainement l'accepter après ce temps est passé. – user1567453