我已经设置了segue方法的准备工作,我相信我已成功将数据发送到第二个ViewController,但我不确定如何使用传递的数据。
例如:
当用户点击蛋白质时,我想发送到第二个tableViewController蛋白质被选中,然后用一系列蛋白质填充它。
以下是我的第一个tableview代码:
First TableView:
class OrdersTableViewController: UITableViewController {
var titleList = ["Protein","Protein Flavor", "Base", "Base Flavor", "Side", "Additional"]
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return titleList.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! OrdersTableViewCell
cell.cellTitle.text = titleList[indexPath.row]
// Configure the cell...
return cell
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "showDetailView") {
let DVC = segue.destination as! OrderDetailTableViewController
if let indexpath = self.tableView.indexPathForSelectedRow {
let proteins = titleList[indexpath.row] as String
DVC.sentData1 = proteins
print (proteins)
}
}
}
}
目前,如果我打印正在发送的值,它似乎正在工作。在这种情况下,它打印“蛋白质”。但理想情况下这就是我想要的,但我不确定该怎么做。
class OrderDetailTableViewController: UITableViewController {
var sentData1:String!
var proteinList = ["Salmon", "Meatballs", "Chicken", "Cod","Sausage", "Frittata"]
var baseList = ["White Rice", "Brown Rice"]
//take what is selected from sentData1 and populate second tableview
if sentData1 == "Protein" {
//populate tableview with proteinList
}
if sentData1 == "Base" {
//populate tableview with baseList
}
我发现的所有帖子都处理了一个TableView将数据发送到正常的viewController,我在尝试实现它时没有找到它。我是Swift的新手,所以任何提示都会受到赞赏。
答案 0 :(得分:2)
我建议设置一个数据结构来表示你的信息而不是多个字符串数组。这是一个简单的例子:
class Nutrient {
var kind: String
var examples: [String]
init(_ kind: String, examples: [String] = []) {
self.kind = kind
self.examples = examples
}
}
let dataModel = [Nutrient("Protein", examples:["Salmon", "Meatballs", "Chicken", "Cod","Sausage", "Frittata"]),
Nutrient("Base", examples:["White Rice", "Brown Rice"])]
这样,您可以使用营养素kind
字段填充您的第一个表格,并将营养素examples
数组传递到您的第二个表格。除了显示的内容之外,第二个表格不需要了解任何内容。
答案 1 :(得分:1)
听起来你在故事板中使用触发你的segue,你可以删除那个触发器,只需从一个viewController到你的第二个VC的segue点。然后添加didSelectCellAtIndexPath
函数:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//save the selectedIndex in a class variable
selectedIndex = indexPath
performSegueWithIdentifier("showDetailView", nil)
}
然后在你的prepareForSegue:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "showDetailView") {
let DVC = segue.destination as! OrderDetailTableViewController
DVC.sentData1 = titleList[selectedIndex.row]
}
}
然后:
class OrderDetailTableViewController: UITableViewController {
var sentData1:String!
var secondTableViewDataSource : [String] = []
var proteinList = ["Salmon", "Meatballs", "Chicken", "Cod","Sausage", "Frittata"]
var baseList = ["White Rice", "Brown Rice"]
//take what is selected from sentData1 and populate second tableview
override func viewDidLoad(){
super.viewDidLoad()
switch sentData1 {
case "Protein":
secondTableViewDataSource = proteinList
//you may need to call tableView.reloadData() here too
break
default:
break
}
}
*我想添加,因为我看到你正在使用UITableViewController
而没有任何问题...使用UIViewController
并订阅UITableViewDataSource / Delegate协议将允许更多灵活性。我几乎没有使用实际的UITableViewController
s