如何在三个视图之间成功创建向下钻取的数据层次结构?

时间:2015-09-23 02:17:03

标签: ios swift uitableview uicollectionview

到目前为止,我已成功在两个表视图之间创建了向下钻取的数据层次结构。我的firstTableView具有原始行集,然后firstTableView中的每一行都会分割成特定于所选第一个TopView行的secondTableView数据。

为了获得该数据层次结构,我创建了一个名为Sport的类。每个运动对象都有一个sportCategory属性,我将其传递给secondTableView。这是代码:

class Sport {

    var name: String = "sport name"
    var sportCategories: NSArray = ["variations of selected sport"]

}

let aSport:[Sport] = {
    var basketball = Sport()
    basketball.name = "Basketball"
    basketball.sportCategories = {
        var temp = ["International Basketball","Wheelchair Basketball","Beach Basketball","Deaf Basketball","Dwarf Basketball"]
        temp.sortInPlace(<)
        return temp
        }()

    var golf = Sport()
    golf.name = "Golf"
    golf.sportCategories = {
        var temp = ["Miniature Golf","Dart Golf","Sholf","Disc Golf","Footgolf"]
        temp.sortInPlace(<)
        return temp
        }()

    var football = Sport()
    football.name = "Football"
    football.sportCategories = {
        var temp = ["Flag Football","Indoor Football","Arena Football","Non-Tackle Football","Paper Football"]
        temp.sortInPlace(<)
        return temp
        }()

    var swimming = Sport()
    swimming.name = "Swimming"
    swimming.sportCategories = {
        var temp = ["Competitive Swimming","Synchronized Swimming","Duo Swimming","Relay Swimming"]
        temp.sortInPlace(<)
        return temp
        }()

    return  [basketball,golf,football,swimming]
    }()

现在的问题是,来自secondTableView的每个sportCategory行必须转换为自己的collectionView,并且选择了特定于该secondTableViewCell行的自己的数据集。所以订单必须去

firstTableViewCell -> secondTableViewCell -> collectionView

我的问题是我不知道如何扩展类以将数据传递给它自己的collectionView。目前,每一行都分成相同的collectionView数据:

那么我可以使用Swift将数据从firstTableView传递到collectionView吗?

1 个答案:

答案 0 :(得分:1)

当数据只是两级层次结构时,很难想象如何向下钻取3级层次结构。让我们做一个三级层次......

class Sport {
    var name: String = "sport name"
    var sportCategories: NSArray = ["variations of selected sport"]
}

说层次结构很简单(但是3级)

All Sports
  |
  |
  ----Basketball
         |
         ---- International Basketball
                    |
                    --- Tibetan Basketball

所以我们不希望“国际篮球”成为一个字符串,我们希望它成为一个对象,就像篮球一样......

var tibetanBBall = Sport()
tibetanBBall.name = "Tibetan Basketball"
tibetanBBall.sportCategories = [  ]  // this is a leaf.  it has no kids

var internationalBBall = Sport()
internationalBBall.name = "International Basketball"
internationalBBall.sportCategories = [ tibetanBBall ]  // see? it has kids

var bBall = Sport()
bBall.name = "Basketball"
bBall.sportCategories = [ internationalBBall ]

注意sportCategories永远不是一个字符串数组?它始终包含其他Sport个对象。这就是层次结构可以任意深入的方式。

现在您的逻辑是:当推送到下一个视图控制器时(可能在prepareForSegue上......问题没有提到你如何启动推送),将所选运动的sportCategories传递给下一个vc。