在Swift中的表视图中填充数据时出现问题

时间:2018-03-01 17:06:57

标签: ios arrays swift uitableview

我通过segue方法将Any类型的数组从一个视图控制器传递给我的表视图控制器。我有三个数组,我首先制作它的字典,并通过segue将该字典传递给下一个视图控制器。我将该数组附加到另​​一个数组中。然后我将附加的数组传递给cellForRow方法,以填充标签中的数据。但是当在单元格中打印标签的值时,它给出为零。我很困惑为什么它不从数组传递值?代码中没有错误。 我的代码就是这个,

在我的第一个视图控制器中,我将我的值附加到这样的数组中,

        ItemName.append(itemName!)
        ItemPrice.append(result)
        ItemDescrition.append(description)

制作这样的字典并将其传递给segue,

 let itemData : [String : Any] = [

         "itemName": ItemName,
         "itemPrice": ItemPrice,
         "itemDescrip": ItemDescrition

    ]

    self.performSegue(withIdentifier: "GoToOrder", sender: itemData)

segue方法就是这个,

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

            if segue.identifier == "GoToOrder"{
            let destination = segue.destination as! UINavigationController
                let target = destination.topViewController as! CartViewController
                target.itemData = sender as! Dictionary
            }

        }

在我的第二个视图控制器中,我从字典中获取值并附加到我在表视图中传递给cellForRow方法的另一个数组,

 var itemData : [String : Any]! = nil
 let resultPrice = itemData["itemPrice"]
    print(resultPrice)
    let itemName = itemData["itemName"] as Any
    print(itemName)
    let itemDescrip = itemData["itemDescrip"] as Any
    nameArray.append(itemName)
    descripArray.append(itemDescrip)
    priceArray.append(resultPrice)

这里我在表视图委托中传递该数组,

 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
    return nameArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

{
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! CartTableViewCell

    cell.dishTitleLbl.text = nameArray[indexPath.row] as? String
    print(cell.dishTitleLbl.text)
    cell.priceLbl.text = priceArray[indexPath.row] as? String
    print(cell.priceLbl.text)
    cell.dishDetailLbl.text = descripArray[indexPath.row] as? String
    print(cell.dishDetailLbl.text)
   // count = cell.priceLbl.text!
    print(count)
    cell.totalLbl.text = "1"
    cell.selectionStyle = .none
    cell.backgroundColor = UIColor.clear
    cell.delegate = self
    return cell
}

如何从单元格中的标签中获取该数组中的值?

1 个答案:

答案 0 :(得分:2)

我会稍微改变一下。首先,我将创建一个名为Item的对象来存储您的所有商品数据。然后我会创建一个dataSource,您可以使用它来从应用程序中的任何位置调用数据,如下所示:

class Item : NSObject {
    var name : String
    var price : [Int] // an array of prices
    var  description : String

    init(_ name: String, _ price : [Int], _ description : String) {
        self.name = name
        self.price = price
        self.description = description
    }

}

class ItemDataSource : NSObject {
    var items = [Item]()
    static let sharedInstance = ItemDataSource()
    private init() {}
}

只要您需要创建新的Item,就可以执行此操作:

let item = Item(“name”,[1234],”description”)
ItemDataSource.sharedInstance.items.append(item)

然后在tableView numberOfRowsInSection中,您可以这样称呼:

ItemDataSource.sharedInstance.items.count

您可以在cellForRowAt中获取信息:

cell.nameLabel.text = ItemDataSource.sharedInstance.items[indexPath.row].name