如何解决关闭我的视图控制器,但“准备”下面的视图控制器
我有一个模态呈现的 ViewController
,里面有一个 UITableView
。当用户单击“Days”时,它会显示此视图控制器(模态)。这是我的故事板:
我想要做的是,当我在模态中单击表格视图中的单元格之一时,我想关闭模态,但还要在根视图控制器中加载新数据。
我怎样才能从 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]
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。