找到我的代码,我检查了所有内容是否正确,并尝试了此处可用的所有可能解决方案,但没有使用。相同的代码在另一个视图控制器中对我有用,可以移动到另一个视图控制器。
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
// handle tap events
print("You selected cell #\(indexPath.item)!")
let nextViewControllerObj = self.storyboard?.instantiateViewController(withIdentifier: "symptomsView") as! SymptomsViewController
self.navigationController?.pushViewController(nextViewControllerObj, animated: true)
}
答案 0 :(得分:2)
有以下几种可能会阻止将一个视图控制器移动到另一个视图控制器。
您正在使用
self.storyboard?
(可选),因此self.storyboard
可能是nil
,并且您将无法继续使用视图控制器。
因此解决方案是,您需要确保self.storyboard不是nil
。例如。
guard let mainStoryboard = self.storyboard {
print("Storyboard is nil.")
return
}
//here you can use like...
let nextViewControllerObj = mainStoryboard.instantiateViewController(withIdentifier: "symptomsView") as! SymptomsViewController
self.navigationController?.pushViewController(nextViewControllerObj, animated: true)
您正在使用
self.navigationController?
(可选)将视图控制器推入导航堆栈。在这种情况下,导航栏可能为nil
,因此您可能拥有视图控制器,但没有导航项可以插入。
解决方案是您需要确保有导航控制器来推送视图控制器。例如。
guard let navController = self.navigationController {
print("self.navigationController is nil.")
return
}
//here you can use like...
let nextViewControllerObj = self.storyboard?.instantiateViewController(withIdentifier: "symptomsView") as! SymptomsViewController
navController.pushViewController(nextViewControllerObj, animated: true)
因此,通过结合使用两种解决方案,您可以像...一样使用
guard let mainStoryboard = self.storyboard {
print("self.storyboard is nil.")
return
}
guard let navController = self.navigationController {
print("self.navigationController is nil.")
return
}
let nextViewControllerObj = mainStoryboard.instantiateViewController(withIdentifier: "symptomsView") as! SymptomsViewController
navController.pushViewController(nextViewControllerObj, animated: true)
因此,如果该对象中的任何一个为nil
,您将在控制台中收到一条消息。
希望这对您有帮助:)