IOS / Swift:将tableview中的Object传递给详细视图控制器

时间:2018-06-05 11:31:04

标签: ios swift segue indexpath

我正试图从tableview中抓取一个对象并将其传递给详细视图,我知道如何在Objective-C中进行操作但是我第一次学习Swift。但是,我的代码没有从索引路径或对象获取行。

这是我的代码。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        print("segue")
        if segue.identifier == "showDetail"{
                    if let destinationVC = segue.destination as? detailVC {
                                    )
                if let indexPath = self.tableView.indexPathForSelectedRow {      
                    print("row%@",indexPath)//Prints as nil
                let thisItem = myItems[indexPath.row]//never gets here
    destinationVC.item = thisItem 
            }
        }
    }
    }

任何人都可以看到为什么我没有获得行或对象?提前感谢任何建议。

修改

我得到了以下工作:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "showDetail" {

            let indexPath: NSIndexPath = self.tableView.indexPathForSelectedRow! as NSIndexPath

            let anItem: myItem = myItems[indexPath.row];

            let destVC = segue.destination as? detailVC
            destVC?.item = anItem

        }
    }

2 个答案:

答案 0 :(得分:2)

实施UITableViewDelegate方法,

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let item = myItems[indexPath.row]
    self.performSegue(withIdentifier: "showDetail", sender: item)
}

然后在下面实施,

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showdetail" {
        let detailController = segue.destination as! detailVC
        detailController.item = sender as! Your_Item
    } 
}

答案 1 :(得分:1)

为什么不使用这些方法来保存所选行或项目的值?然后执行segue?

tableView(_:didDeselectRowAt:)
tableView(_:didSelectRowAt:)