我正试图从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
}
}
答案 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:)