在动态值Tableview中使用performSeguewithIdentifier函数

时间:2017-02-15 13:29:33

标签: ios swift uitableview tableviewcell

我可以在tableview中列出数据。当我选择一行并尝试传递另一个视图控制器并显示与我按下的单元格相关的特定数据时,它无法成功。 我无法存储数据" selectedMeal"在prepareforsegue函数中的变量,它总是返回[]。 我认为,我的主要问题是选择细胞并发送到这个细胞以准备segue功能。也许,它在DispatchQueue.main.async函数中存在问题。

*当我尝试传递静态数据时,效果很好。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    if let cell = tableView.cellForRow(at: indexPath) {
        cell.accessoryType = .checkmark;

        DispatchQueue.main.async {
            self.performSegue(withIdentifier: "gotoOrderDetail", sender: self) 
        }
    }
}

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

    if (segue.identifier == "gotoOrderDetail") {
        let DestViewController : OrderDetailListViewController = segue.destination as! OrderDetailListViewController
        let selectedMeal = selectedCells.map { (index: Int) -> SavedMeal in
            return savedMeal[index]
        }
        DestViewController.mealarray = selectedMeal
    }
}

2 个答案:

答案 0 :(得分:1)

尝试使用此代码

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

if (segue.identifier == "gotoOrderDetail") {
    let DestViewController : OrderDetailListViewController = segue.destination as! OrderDetailListViewController
    let path = self.tableView.indexPathForSelectedRow()! // get the selected indexPath
    DestViewController.mealarray = savedMeal[path.row]
}
}

答案 1 :(得分:0)

尝试使用Sender参数

你能这样说:

self.performSegue(withIdentifier: "gotoOrderDetail", sender: indexPath)

然后准备(对于segue:发送者?)

if (segue.identifier == "gotoOrderDetail") {
    let DestViewController : OrderDetailListViewController = segue.destination as! OrderDetailListViewController
    let index = sender as! Int
    DestViewController.mealarray = savedMeal[index]
}

p / s:在这种情况下你不需要使用调度队列