嗨,我是一个快速的新手。
我需要在桌面视图中以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]
}