IOS/Swift:将表视图中的对象传递给详细视图控制器
Posted
技术标签:
【中文标题】IOS/Swift:将表视图中的对象传递给详细视图控制器【英文标题】:IOS/Swift: Pass Object in tableview to detail view controller 【发布时间】:2018-06-05 11:31:04 【问题描述】:我正在尝试从 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
【问题讨论】:
【参考方案1】:实现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
【讨论】:
Your_Item 是什么?它是否记得 item=myItems[indexPath.row] 来自其他方法? 这是你的对象 这里的发送者似乎是UITableCell,而不是对象。所以它试图将表格单元传递给destinationVC,而不是对象:我们正在发送%@ Optional(为什么不使用这些方法来保存所选行或项目的值?然后执行segue?
tableView(_:didDeselectRowAt:)
tableView(_:didSelectRowAt:)
【讨论】:
以上是关于IOS/Swift:将表视图中的对象传递给详细视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
如何将表单视图作为 django 中的上下文传递给另一个视图?
将 Django 视图中的数据作为 JSON 对象传递给 vue 实例
在 MVC 5 中,如何将表对象数据作为列表传递给控制器视图模型?