0
如何显示多级菜单,如雨燕如何使用UITableView创建菜单,其子菜单数量未知?
我想显示多级菜单为一系列UITableView
s,其中每个对象可能有未知数量的孩子一个UITableView
,然后可能有n孩子的数量,等等。
我目前正在试图让它与闭包回调(下)一起工作,但是一旦我进入到菜单层次结构的两层深处,就会遇到问题。
相关的代码:
TableViewController
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var selectedObject:Dictionary<String, AnyObject>
if (self.hasChildren) {
selectedObject = self.childrenObjects![indexPath.row]
} else {
selectedObject = self.tableViewData![indexPath.row]
}
self.selectionCallback!(tableView: tableView, indexPath: indexPath, selectedObject: selectedObject, doesHaveChildren: self.hasChildren)
}
MenuViewController
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(true)
let menuTableViewController:TableViewBuilder = TableViewBuilder()
menuTableViewController.tableViewData = self.passedData as Array<Dictionary<String, AnyObject>>?
self.navController = UINavigationController(rootViewController: menuTableViewController)
self.presentViewController(self.navController!, animated: false) {
print("Nav controller presented")
//navController.pushViewController(menuTableViewController, animated: false)
}
self.selectedTapCallback = { (tableView, indexPath, selectedObject, doesHaveChildrenTop) in
let detailMenuViewController:TableViewBuilder = TableViewBuilder()
detailMenuViewController.tableViewData = selectedObject["children"] as! StandardCollectionType
self.navController!.pushViewController(detailMenuViewController, animated: true)
}
menuTableViewController.setSelectedCallback(self.selectedTapCallback!)
}
,我试图来表示数据如下:
"menu": [
{
"title": "Jurisdiction",
"subtitle": "Where did you get the ticket?",
"has_children": true,
"meta": {
"top_level_menu": true
},
"children": [{
"title": "New South Wales",
"subtitle": "Seeking review with the Office of State Revenue (SDRO)",
"has_children": true,
"meta": {
"option_uid": "nsw"
},
"children": [{
"title": "Car registration permit date inccorect",
"subtitle": null,
"has_children": false,
"meta": {
"option_uid": "nsw.permit.date.inccorect"
}
},
{
"title": "There was an issue with the signs",
"subtitle": "This could be due to a number of reasons",
"has_children": true,
"children": [{
"title": "The signs were contradictory",
"subtitle": null,
"has_children": false,
"meta": {
"option_uid": "nsw.bay.signs.contradictory"
}
},
{
"title": "The signs were unclear",
"subtitle": "The signs may have been unclear or ambiguous",
"has_children": false,
"meta": {
"option_uid": "nsw.bay.signs.unclear"
}
}
]
},
{
"title": "The offence happened after I sold the car",
"subtitle": "It wasn't me!",
"has_children": false,
"meta": {
"option_uid": "nsw.car.after.sold"
}
}
我试图处理通过使用- tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
引发了封闭回调实例化另一个MenuViewController
实例(如上面的代码),然后让主导航控制器推它提出这一点,但是这是打破时试图从第二层移动到菜单的第三层。
任何想法,以最好的方式来处理这将不胜感激!