将数据从 UITableView 传递到 UIViewController

Posted

技术标签:

【中文标题】将数据从 UITableView 传递到 UIViewController【英文标题】:Passing data with segue from UITableView to UIViewController 【发布时间】:2016-07-23 18:37:41 【问题描述】:

我正在尝试将数据从我的 UITableView 传递到 UIViewController 以显示更多细节。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 

        if segue.identifier == "PassDetail" 

            let vc = segue.destinationViewController as! ToDoListDetailViewController
            let customIndexPath = self.tableView.indexPathForSelectedRow
            vc.titleString = userList[userList.count - customIndexPath!.row - 1].Title
            vc.descriptionString = userList[userList.count - customIndexPath!.row - 1].Description

        

    

我创建了一个segue push depricated 并设置了适当的标识符。

运行后,什么都没有发生。没有崩溃,我尝试设置创建打印方法,当我点击一个单元格时没有调用任何内容。

我试图查看我的字符串中是否有值与打印语句一起传递,但我没有收到我的打印语句的回复。

即使没有任何数据,当我点击一个单元格时,应用程序至少应该崩溃。但事实并非如此。

我尝试使用不同的 segues,例如 show 之类的,但这并没有成功。

我的代码是否遗漏了什么?

解决方案

我找到了解决方案。

这就是我理解它的工作原理的方式。 我上面的代码传递了数据,但它不会推送到下一个视图控制器。

为了解决这个问题,我使用了 didelectRowAtIndexPath 方法并设置了我的字符串。

以下是我的完整工作代码。

覆盖 func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)

    contentTitle = "Some title" //contentTitle is a global variable

    tableView.deselectRowAtIndexPath(indexPath, animated: true)
    let row = indexPath.row
    performSegueWithIdentifier("PassData", sender: row)


override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 

    if segue.identifier == "PassData" 

        let vc = segue.destinationViewController as! ToDoListDetailViewController
        vc.titleString = contentTitle //setting the titleString created from my ToDoListDetailViewController and setting it to contentTitle

    


【问题讨论】:

您应该尝试查看的第一件事是,“userList[userList.count - customIndexPath!.row - 1].Title”是否有任何价值。设置 vc 变量后放置一个 print 语句,看看会发生什么。还要确保你的 segue 标识符是正确的 @The_Curry_Man 我这样做了,但我没有收到我的印刷声明的回复。即使我的 userList 中没有值,它至少应该崩溃,但我没有。 【参考方案1】:

据我怀疑,您没有以编程方式推送您的 segue。

从here 获得提示,您是否从您的 didSelectRowAtIndexPath 方法中推动了转场?

【讨论】:

我本来是想推segue的,但是正确的做法是显示segue。但这也不起作用。 没关系,但是您是通过 didSelectRowAtIndexPath 方法手动完成的吗? 嗯,不,我实际上没有。有机会我会回复你的去试试

以上是关于将数据从 UITableView 传递到 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章

将 managedobject 从 uitableview 传递到文本字段以在核心数据模型中进行编辑

将数据传递到 UITableView

在 UITableView 中传递和显示数据

如何使用 didSelectRowAtIndexPath 将变量从 uitableview 传递到第二个 tableview?

如何从 Swift 中嵌入 UITableView 的文本字段中检索数据?

使用自定义单元格在两个 UITableView 之间传递数据