我通过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
}
如何从单元格中的标签中获取该数组中的值?
我会稍微改变一下。首先,我将创建一个名为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