【问题标题】:How can I pass the array of dictionaries from one tableview to another custom tableview in Swift如何将字典数组从一个表视图传递到 Swift 中的另一个自定义表视图
【发布时间】:2016-07-16 11:37:59
【问题描述】:

我在表格视图中获取Json 菜单数据。现在我需要在创建自定义单元格时将"Subcategory" 数据传递给另一个表格视图。我在didSelectRowAtIndexPath 的自定义单元格中获取了另一个表格视图。

我的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”,以便将子类别数据显示在各个部分中?

【问题讨论】:

    标签: iphone json swift uitableview


    【解决方案1】:

    如果我没看错,您已经在某处创建了一个名为 SubCategory 的类。如果是这种情况,您可以在自定义单元格中创建一个类型为 SubCategory 的 var,可选,在创建单元格时,您可以传递您在自定义单元格中收到的 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 subCat: subCategory? {
        didSet{
    
            if let name = subCategory?.name {
                nameLabel.text = name
            }else {
                nameLabel.text = "Some default text"
            }
    }
    

    这是更安全的方法,因此如果 subCategory 为 nil,您的应用不会崩溃,您可以进一步检查代码以了解其为 nil 的原因。

    【讨论】:

    • 但是当我尝试像这样在 MENUTableViewCell 中显示它的值时,我在 subCat 中得到 nil 值pastie.org/10909609
    • 在您的代码中,我认为应该使用 cell.subCat 而不是 cell.SubCategory.... 因为您已将 subCat 创建为 SubCategory 类型
    • 我编辑了我的答案,以便您可以使用 didSet 安全地解开您正在传递的子类别 var 并在它为 nil 时处理它。我想您必须检查您的代码,以便在创建单元格时您已经收到了 json 数据。
    • 它不工作。如果您能在这里提供帮助,请查看此链接stackoverflow.com/questions/38433092
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多