将值从表视图控制器传递到视图控制器

Posted

技术标签:

【中文标题】将值从表视图控制器传递到视图控制器【英文标题】:Passing value from table view controller to view controller 【发布时间】:2017-08-09 09:38:35 【问题描述】:

我试图将用户点击的单元格的值传递给另一个视图控制器。

这是我的代码。

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
    productDisplayed = currentProductList[indexPath.row] as? Product
    performSegue(withIdentifier: "ProductDetailSegue", sender: self)



override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    if ( segue.identifier == "AddProductSegue")
        let controller: AddProductViewController = segue.destination as! AddProductViewController
        controller.delegate = self
    

    if ( segue.identifier == "ProductDetailSegue")

        let controller: ProductDetailsViewController = segue.destination as! ProductDetailsViewController
        controller.currentProduct = productDisplayed
    

首先,我没有写“performSegue()”。 我遇到的问题是屏幕会先被转移而不是赋值给“productDisplayed”,这意味着第二个VC中的对象“currentProduct”是nil。

然后我添加了“performSegue()”。 它仍然没有工作。问题是第二个屏幕显示了两次。第一次与上图相同。第二次是正确的。

但是当我试图点击左上角的后退按钮时。它返回到 nil 页面而不是 ProductDetail 页面。截图如下。

似乎总是先调用“准备”方法,然后调用 tableView。如何更改订单?如果可以的话,我认为应该解决这个问题。

希望能得到您的帮助。 谢谢。

【问题讨论】:

【参考方案1】:

问题原因: 在您的故事板中,您可能已经将ProductDetailsViewControllerUITableViewCell 直接绑定。

表示点击/选择行后,会直接进行segue(导航)操作。

同时,您以编程方式使用performSegue(withIdentifier: "ProductDetailSegue", sender: self) 执行导航操作

解决方案: 您有两种方法可以解决此问题。

    我建议 - 在您的故事板中,将 segue 连接从 UITableViewCell 切换到 UIViewController(从 UITableViewCell 中删除 segue 连接,并将相同的 segue 连接附加到您的 tableview 的 UIViewController) 在你的源代码中,删除/移除这一行performSegue(withIdentifier: "ProductDetailSegue", sender: self)并处理来自这个函数的数据传输override func prepare(for segue: UIStoryboardSegue, sender: Any?)

【讨论】:

我试图删除“performSegue()”。但当时转移的对象是零。似乎该值未分配给 productDisplayed。 哇!你的第一种方法有效!非常感谢你。但是我仍然对如何以第二种方式制作它感到困惑。 酷。答案被接受。请您解释一下为什么第二种方法不起作用? 好的,将分享示例演示项目,请给我一些时间。 干杯老兄。等你:)

以上是关于将值从表视图控制器传递到视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

将值从视图传递到控制器,我错过了啥?

将值从一个视图控制器传递到另一个视图控制器的问题

通过 Laravel 中的 AJAX 发布请求将值从一个视图传递到另一个视图

使用 location.href 将值从视图传递到控制器为 null

将值从模型传递到 CI 中的视图

IOS 将值从 App Delegate 传递到初始视图控制器并在 viewWillAppear 中使用这些值