关闭我的视图控制器,但“准备”下面的视图控制器

问题描述

我有一个模态呈现的 ViewController,里面有一个 UITableView。当用户单击“Days”时,它会显示此视图控制器(模态)。这是我的故事板:

enter image description here

enter image description here

我想要做的是,当我在模态中单击表格视图中的单元格之一时,我想关闭模态,但还要在根视图控制器中加载新数据。

我怎样才能从 segued 视图控制器访问根视图控制器?

    func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) {
    self.dismiss(animated: true,completion: nil)
}

// MARK: - Navigation
override func prepare(for segue: UIStoryboardSegue,sender: Any?) {
    let destinationVC = segue.destination as! DayView
    if let indexPath = tableView.indexPathForSelectedRow {
        destinationVC.day = days![indexPath.row]
    }
}

我想要一些类似于我上面写的东西,但是虽然我的模态确实被解除了,但我想要的是在点击 TableViewCell 时以某种方式触发准备函数中的代码

解决方法

比协议/委托更短更简单的方法是创建一个闭包:

为了返回一个字符串,在第一个 ViewController 中:

override func prepare(for segue: UIStoryboardSegue,sender: Any?) {
    if let viewControllerB = segue.destination as? ViewControllerB {
        viewControllerB.callback = { message in
            
            //Do what you want in here!

        }
    }
}

在 ViewControllerB 中:


var callback : ((String) -> Void)?

func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) {
    callback?("Your Data")
    self.dismiss(animated: true,completion: nil)
}

,

您在正确的道路上,您需要再添加两个函数 1. unwindsegue 和一个 this 不是目标其源,因此您需要从目标更改为源。

 // MARK: - Navigation
override func prepare(for segue: UIStoryboardSegue,sender: Any?) {
    let destinationVC = segue.source as! DayView
    if let indexPath = tableView.indexPathForSelectedRow {
        destinationVC.day = days![indexPath.row]
    }
}

参考:How to Pass Data in an Unwind Segue