Ios 避免视图控制器的多实例创建

Ios 避免视图控制器的多实例创建,ios,swift,uiviewcontroller,uiview-hierarchy,Ios,Swift,Uiviewcontroller,Uiview Hierarchy,我有一个自定义视图控制器,我在其中创建了一个带有多个按钮的自定义导航栏。我将该自定义视图控制器用作多个子控制器的父级(以便在多个控制器中使用相同的导航栏)。我正在某个按钮上导航到某个控制器。问题是,每次我点击该按钮时,都会创建该viewcontroller的实例。当我返回时,会显示相同的控制器 这是菜单按钮单击的操作: @objc func showMenu(){ let storyBoard = UIStoryboard(name: "Main", bundle: nil) let menuV

我有一个自定义视图控制器,我在其中创建了一个带有多个按钮的自定义导航栏。我将该自定义视图控制器用作多个子控制器的父级(以便在多个控制器中使用相同的导航栏)。我正在某个按钮上导航到某个控制器。问题是,每次我点击该按钮时,都会创建该viewcontroller的实例。当我返回时,会显示相同的控制器

这是菜单按钮单击的操作:

@objc func showMenu(){
let storyBoard = UIStoryboard(name: "Main", bundle: nil)
let menuVC = storyBoard.instantiateViewController(withIdentifier: "MenuVC") as! MenuVC
if menuVC.view.window ==nil {
UIView.transition(with: self.view, duration: 0.5, options: .curveEaseIn,          animations: {
       self.present(menuVC, animated: true, completion: nil)
    })
} else {
    // view controller is visible
   }
}
@objc func  backBtnPressed(){
    self.dismiss(animated:true,complition:nil)
}
这是“后退”按钮单击的操作:

@objc func showMenu(){
let storyBoard = UIStoryboard(name: "Main", bundle: nil)
let menuVC = storyBoard.instantiateViewController(withIdentifier: "MenuVC") as! MenuVC
if menuVC.view.window ==nil {
UIView.transition(with: self.view, duration: 0.5, options: .curveEaseIn,          animations: {
       self.present(menuVC, animated: true, completion: nil)
    })
} else {
    // view controller is visible
   }
}
@objc func  backBtnPressed(){
    self.dismiss(animated:true,complition:nil)
}
我尝试了viewController.view.window,但问题是每次按下按钮时都会创建baseViewController的新实例。如何避免创建多个实例?我没有使用导航控制器


如何知道控制器已在此场景中出现。

创建
var menuVC
变量作为实例变量,而不是局部变量,然后按如下方式检查是否为零

if menuVC != nil {
// use the created instance of menuVC
} else {
// create menuVC 
}

这样,您只有一个
menuVC
的实例。请评论任何疑问。

Ya,应该是var menuVC,它只是一个例子。