我要做的是,弹出所有以前的视图控制器从堆栈到‘菜单’控制器。我有一段代码可以做到这一点,但是当点击“菜单”时,应用程序就会崩溃。
崩溃的原因是:“试图弹出一个不存在的视图控制器。”
下面是我代码的一部分:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
// 0 = menu
if indexPath.row == 0 {
let vcName = identities[indexPath.row]
let viewController = storyboard?.instantiateViewController(withIdentifier: vcName)
let _ = navigationController?.popToViewController(viewController!, animated: true)
} else {
let vcName = identities[indexPath.row]
let viewController = storyboard?.instantiateViewController(withIdentifier: vcName)
self.navigationController?.pushViewController(viewController!, animated: true)
}
}发布于 2017-05-22 22:20:48
您无法实例化要弹出的视图控制器的新实例;您需要弹出到导航堆栈中的实际实例。
如果菜单是导航堆栈的根,那么可以使用popToRootViewController。如果它在堆栈的其他地方,那么要么需要保存对它的引用,要么可以迭代导航控制器的viewControllers数组来找到它,然后弹出到它。
if let navController = self.navigationController {
for controller in navController.viewControllers {
if controller is MenuController { // Change to suit your menu view controller subclass
navController.popToViewController(controller, animated:true)
break
}
}
}https://stackoverflow.com/questions/44122917
复制相似问题