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(>) 不会是 UITableViewCell,而是对象 myItems 数组中有什么?【参考方案2】:

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

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

【讨论】:

以上是关于IOS/Swift:将表视图中的对象传递给详细视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何将表单视图作为 django 中的上下文传递给另一个视图?

将 Django 视图中的数据作为 JSON 对象传递给 vue 实例

在 MVC 5 中,如何将表对象数据作为列表传递给控制器​​视图模型?

如何将 Flask 的 app.py 中的 socketio 对象传递给 Python 中的视图模块?

SwiftUI - 将托管对象上下文传递给模型

将选定对象传递给第二个视图控制器并在 uilabel 中显示