所以我一直试图做的事情基本上是通过三层而不是两层获得一个主 - 细节流。也就是说,我试图创建一个主(主)屏幕 - >类别屏幕 - >我的应用程序中的详细(特定)屏幕流程。
为此,我尝试根据第一个屏幕上选择的内容加载特定类别。之后,我只是将该特定项目加载到详细信息屏幕中。
我尝试设置它以便在didSelectItemAt上设置categoryToLoad变量,然后它准备segue,将变量传递给加载的vc,并显示。打开的vs应该处理密钥并打开相关的类别。
实施例。我点击了#34;一些视频"。 categoryToLoad设置为"一些视频"。赛格开始准备。它将categoryToLoad读作"一些视频",将categoryKey设置为"视频"。它将第二个vc的categoryName设置为" Videos"。第二个vc加载[Videos.plist]。
然而,使用当前代码,虽然它完全正确地执行了这一操作,但按下按钮会导致其自身的segue,因此当我使用performSegue时,它会导致两个segue,即storyboard的segue以及performSegue。
当我删除performSegue时(它执行仅显示我的空白默认故事板的单个segue,加载为"默认")。如果我回去再试一次,它会正确加载原始按下的类别。
EG。我按了视频,显示默认。我回来了,按资源,显示视频。
事情的顺序出现了问题,但我是新的,所以我很难搞清楚。在这里寻找一段时间。
class HomeViewController: UICollectionViewController {
var categoryToLoad = ""
...
override func prepare(for segue: UIStoryboardSegue, sender: Any?){
if segue.identifier == "toCategorySegue"{
let catVC = segue.destination as! CategoryViewController
var categoryKey = "Default"
switch categoryToLoad {
case "Some Videos"
categoryKey = "Videos"
case "Help Resources"
categoryKey = "Resources"
...
default:
categoryKey = "Default"
catViewController.categoryName = categoryKey
}
override func collectionView(_ collectionView: UICollectionView,
didSelectItemAt indexPath: IndexPath){
categoryToLoad = photos[indexPath.item].caption
// Returns the title of a particular item (E.g. "Contact Us")
//alternatively, I also tried adding
//performSegue(withIdentifier("toCategorySegue", sender: self)) here
...
}
class CategoryViewController: UICollectionViewController{
var categoryName = ""
// here the vc loads the data for its collection view from
// a plist named [categoryKey].pList
...
}