Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何防止用户能够从滑出设置菜单连续调用同一视图控制器两次?_Ios_Swift_Uiviewcontroller_Uinavigationcontroller - Fatal编程技术网

Ios 如何防止用户能够从滑出设置菜单连续调用同一视图控制器两次?

Ios 如何防止用户能够从滑出设置菜单连续调用同一视图控制器两次?,ios,swift,uiviewcontroller,uinavigationcontroller,Ios,Swift,Uiviewcontroller,Uinavigationcontroller,我有以下功能,用于识别嵌入在选项卡栏控制器中的导航控制器并推送纵断面图控制器。此函数可以工作,但我想做一些检查,以防止在纵断面图控制器是最近推送的视图控制器时,如果从滑出菜单调用此函数,则再次显示纵断面图控制器。下面是函数: private func toProfile() { guard let appDelegate = UIApplication.shared.delegate as? AppDelegate, let tbc = appDelegate.windo

我有以下功能,用于识别嵌入在选项卡栏控制器中的导航控制器并推送纵断面图控制器。此函数可以工作,但我想做一些检查,以防止在纵断面图控制器是最近推送的视图控制器时,如果从滑出菜单调用此函数,则再次显示纵断面图控制器。下面是函数:

private func toProfile() {
    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate,
        let tbc = appDelegate.window?.rootViewController as? TabBarController,
        let nav =  tbc.viewControllers?[tbc.selectedIndex] as? UINavigationController else { return }
    let profileVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "profileVC")
    nav.pushViewController(profileVC, animated: true)
    delegate?.dismissSettingsVC()
}
我试过:

if nav.viewControllers.last == profileVC {
    print("Do nothing")
} else {
    nav.pushViewController(profileVC, animated: true)
}

但它从来没有说两者是平等的。如何生成if语句来检查最后一次推送的视图控制器是否为profileVC?

您需要检查类型

if nav.viewControllers.last is ProfileVC {
   print("Do nothing") 
}
else { 
  nav.pushViewController(profileVC, animated: true) 
}

目前,您比较了相同类型的两个实例,确定它们不相等

当我尝试时,它给出了一个关于profileVC的错误,说“使用未声明的类型”profileVC“答对了!解决了。非常感谢。