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

时间:2018-07-30 12:04:45

标签: ios swift uiviewcontroller uiview-hierarchy

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

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

#!/bin/bash

cd /tmp
hg init view-abc
cd view-abc
echo x > x
hg commit -Am x

hg branch topic
echo a > a
hg commit -Am a

hg up default
echo y > y
hg commit -Am y

hg up topic
hg merge default
hg commit -m merge
echo b > b
hg commit -Am b

hg up default
echo z > z
hg commit -Am z

hg up topic
hg merge default
hg commit -m merge

hg up default
echo t > t
hg commit -Am t

hg up topic
echo c > c
hg commit -Am c

hg diff -r 'p2(last(merge())):.'

这是单击后退按钮的操作:

@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
   }
}

我尝试过viewController.view.window,但是问题是每次按下按钮都会创建baseViewController的新实例。如何避免创建多个实例?我没有使用导航控制器。

在这种情况下如何知道控制器已经存在。

1 个答案:

答案 0 :(得分:0)

var menuVC变量创建为实例变量,而不是局部变量,然后像下面一样检查nil。

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

这样,您只有一个menuVC实例。请发表任何疑问。