2016-07-16 61 views
0

我從tableview中獲取Json菜單數據。現在我需要在創建自定義單元格時將"Subcategory"數據傳遞給另一個tableview。我在didSelectRowAtIndexPath的自定義單元格中看了另一個tableview。如何將字典數組從一個tableview傳遞到另一個自定義tableview中Swift

我的JSON數據格式

[{ 
     "id" :"233", 
     "name" :"dgghd", 
     "subcategory:[{ 
        "id" :"233", 
         "name" :"dgghd", 
         "items:[{ 
           "id" :"233", 
           "name" :"dgghd", 

           },... more items] 

        },....more subcategories 
        ] 
     },....more main menus 
     ]     

抓取菜單數據

Alamofire.request(.GET, myUrl) 
     .validate() 
     .responseJSON { response in 
      switch response.result 
      { 
      case .Success: 
       if let value = response.result.value { 
        let json = JSON(value) 
      //      print(json) 

       //main menu section 

        for (_, content) in json { 

         let menu = Menu(id: Int(content["id"].stringValue), 
             name: content["name"].string, 
             image: content["image"].string, 
             coupon: content["coupon"].int, 
             icon: content["icon"].string, 
             order: Int(content["order"].stringValue), 
             aname: content["name"].string, 
             options: Int(content["options"].stringValue), 
            subcategory:content["subcategory"].arrayObject) 

         self.menus.append(menu) 
        } 

        for (_, sub) in json { 

         for (_, subcategory) in sub["subcategory"] { 

          let subcategory = SubCategory(
           id: Int(subcategory ["id"].stringValue), 
           name: subcategory ["name"].string, 
           description: subcategory ["description"].string, 
           image: subcategory ["image"].string, 
           coupon: Int(subcategory ["coupon"].stringValue), 
           icon: subcategory ["icon"].string, 
           order: Int(subcategory ["order"].stringValue), 
           aname: subcategory ["aname"].string, 
           options: Int(subcategory ["options"].stringValue), 
           items: subcategory ["items"].arrayObject 
          ) 

          self.subcategories.append(subcategory) 
         } 

自定義單元格創建代碼

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return menus.count 
} 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCellWithIdentifier("Menucell", forIndexPath: indexPath)as! MENUTableViewCell 

    let menu: Menu = menus[indexPath.row] 
    cell.Ordermenu.text! = menu.name! 

    return cell 
} 

如何將子類別傳遞給自定義「Menutableviewcell」,以便我可以在子類別數據中顯示子節點?

回答

0

如果我明白了,你已經創建了一個名爲SubCategory的類。如果是這種情況,您可以在自定義單元格內創建一個具有可選SubCategory類型的變量,並在創建單元格時,您可以將您接收到的自定義單元格內的子類別傳遞給您,並隨時隨地使用它。

您的自定義單元格會是這樣的

class MENUTableViewCell: UITableViewCell { 

    var subCat: SubCategory? 

    override init(frame: CGRect) { 

     super.init(frame: frame) 
     setupViews() 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
} 

,當你創建單元格會像

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCellWithIdentifier("Menucell", forIndexPath: indexPath)as! MENUTableViewCell 

    cell.SubCategory = subcategories[indexPath.item] 

    return cell 
} 

,你可以做同樣的你的菜單,這樣你可以通過所有您的單元格內的數據並處理所有內容。

編輯:您可以使用didSet爲SUBCAT VAR是這樣的:

var subCat: subCategory? { 
    didSet{ 

     if let name = subCategory?.name { 
      nameLabel.text = name 
     }else { 
      nameLabel.text = "Some default text" 
     } 
} 

這是更安全的方式,所以如果子類別是零您的應用程序不會崩潰,你可以進一步檢查你的代碼看看爲什麼它是零。

+0

但我越來越無價值的subCat當我試圖顯示它的值在MENUTableViewCell像這樣http://pastie.org/10909609 –

+0

而在你的代碼,我認爲,而不是cell.SubCategory ....細胞。應該使用subCat,因爲你已經創建了SubCat作爲SubCategory類型 –

+0

我編輯了我的答案,以便你可以使用didSet安全地解開你傳遞的subCategory var,並在它爲零時處理它。我想你必須檢查你的代碼,所以當單元格被創建時,你已經收到了json數據。 –

相關問題