2016-07-16 15 views
0

Ich erhalte Json Menüdaten in einer Tabellenansicht. Jetzt muss ich die "Subcategory" Daten zu der anderen Tabellenansicht zum Zeitpunkt der benutzerdefinierten Zellenerstellung übergeben. Ich nahm eine weitere Tabellenansicht in der benutzerdefinierten Zelle unter didSelectRowAtIndexPath.Wie kann ich das Array von Wörterbüchern von einer Tabellenansicht zu einer anderen benutzerdefinierten Tabellenansicht in Swift

Mein json Datenformat

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

           },... more items] 

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

Fetching Menüdaten

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) 
         } 

individuelle Zelle Erstellungscode

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 
} 

Wie kann ich die Unterkategorie an die benutzerdefinierte "Menutableviewcell" übergeben, damit ich die Unterkategorien dort in Abschnitte anzeigen kann?

Antwort

0

Wenn ich das richtig mache, haben Sie irgendwo eine Klasse namens SubCategory erstellt. Wenn dies der Fall ist, können Sie eine Variable mit der Art der Unterkategorie erstellen, optional, in Ihrer benutzerdefinierten Zelle und beim Erstellen der Zelle können Sie die Unterkategorie, die Sie in Ihrer benutzerdefinierten Zelle erhalten haben, übergeben und dort verwenden, wie Sie möchten.

Ihre individuelle Zelle wäre so etwas wie

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") 
    } 
} 

und wenn man die Zelle wäre etwas schaffen wie

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 
} 

Sie das gleiche mit Ihrem Menü tun könnte und auf diese Weise Sie alle passieren kann deine Daten in deiner Zelle und handle dort alles.

Edit: Sie konnten die didSet für die subcat var wie folgt verwenden:

var subCat: subCategory? { 
    didSet{ 

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

dies ist die sicherere Art und Weise so, wenn die Unterklasse null Ihre App nicht abstürzen und Sie können Ihren Code überprüfen weiter Sieh, warum es nichts ist.

+0

aber ich bekomme keinen Wert in subCat, wenn ich versuche, seinen Wert in MENUTableViewCell wie folgt anzuzeigen http://pastie.org/10909609 –

+0

Und in Ihrem Code denke ich statt cell.SubCategory .... Zelle. subCat sollte verwendet werden, weil Sie subCat als SubCategory-Typ erstellt haben. –

+0

Ich habe meine Antwort bearbeitet, so dass Sie mit didSet die von Ihnen übergebene Unterkategorie var sicher auspacken und damit umgehen können, wenn sie null ist. Ich denke, dass Sie Ihren Code überprüfen müssen, wenn die Zelle erstellt wird, hätten Sie die JSON-Daten bereits erhalten. –

Verwandte Themen