2016-07-04 49 views
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实例(如上面的代码),然后让主导航控制器推它提出这一点,但是这是打破时试图从第二层移动到菜单的第三层。

任何想法,以最好的方式来处理这将不胜感激!

回答

0

我开发了类似的东西,我用这个library

希望这可以帮助你。