如何在字典数组中填充Swift 2中的tableView?

时间:2016-06-22 19:09:39

标签: arrays swift uitableview dictionary menu

嗨,我是一个快速的新手。

我需要在桌面视图中以dinamically的形式填充我的应用程序菜单,但是我在关联数组中添加了一系列字典时遇到了麻烦。

我有这个菜单项的课程。

class Menu: NSObject {

    // properties
    var id:String = ""
    var name:String = ""

}

我有一个api的json格式,

[{
    "id": "local",
    "name": "Local"
}, {
    "id": "sports",
    "name": "Sports"
}, {
    "id": "bajacalifornia",
    "name": "Baja California"
},...
]

因此,在我的MenuModel中,我使用json获取项目并附加到对象数组,并在我的菜单控制器中准备好数据时通过委托通知

if let items = json["items"].array {

    for menuitem in items {

   // Create menu objects off of the JSON response
   let menuObj = Menu()

   menuObj.id = menuitem["id"].stringValue
   menuObj.name = menuitem["name"].stringValue

   arrayItems.append(menuObj)
   }

   self.menuArray = arrayItems

  // Notify the delegate that the data is ready
  if self.delegate != nil {
      self.delegate!.menuReady()
  }
} // end let items

我在菜单控制器中需要这种数据结构。所以我的问题是我无法将对象数组分配到数组的关键字"新闻"填充我的tableview并显示菜单中的选项。

我需要将self.menuArray追加到"新闻" item&#39>数组。

// data structure  to fill the menu tableview
let menuSectionHeaders = ["News", "Contact", Media]
var items = [
    "News": [["id":"local","name":"Local"],["id":"sports","name":"Sports"],["id":"bajacalifornia","name":"Baja California"],...more options],
    "Contact": ["comments"],
    "Media": ["Photos","Videos"]
]

我的菜单控制器代码现在正常工作,但是在这种方法中使用静态数据,并且工作正常,但我需要动态填充tableview,使用上面显示的数据结构,我不能。

//Static Data and working code.

let menuSectionHeaders = ["News", "Contact","Media"]
var staticItems = [
    "News" : ["local", "sports", "bajacalifornia"],
    "Contact" : ["comments"],
    "Media" : ["Photos","Videos"]
]


override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return menuSectionHeaders.count
}

override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 60
}

override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return menuSectionHeaders[section].uppercaseString
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    let key = sectionHeaderName(forSection: section)
    return staticItems[key]!.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell: UITableViewCell?
    if indexPath.section == 0 {
        cell = tableView.dequeueReusableCellWithIdentifier("newscell", forIndexPath: indexPath) as UITableViewCell
    }if indexPath.section == 1 {
        cell = tableView.dequeueReusableCellWithIdentifier("contactcell", forIndexPath: indexPath) as UITableViewCell
    }
    else {
        cell = tableView.dequeueReusableCellWithIdentifier("mediacell", forIndexPath: indexPath) as UITableViewCell
    }
    let key = sectionHeaderName(forSection: indexPath.section)
    cell!.textLabel?.text = staticItems[key]![indexPath.row].capitalizedString
    return cell!
}


func sectionHeaderName(forSection section: Int) -> String {
    return menuSectionHeaders[section]
}

0 个答案:

没有答案