使用UICollectionView swift

时间:2016-12-16 18:54:52

标签: swift uicollectionview

所以我一直试图做的事情基本上是通过三层而不是两层获得一个主 - 细节流。也就是说,我试图创建一个主(主)屏幕 - >类别屏幕 - >我的应用程序中的详细(特定)屏幕流程。

为此,我尝试根据第一个屏幕上选择的内容加载特定类别。之后,我只是将该特定项目加载到详细信息屏幕中。

我尝试设置它以便在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
    ...
}

0 个答案:

没有答案