You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从父ViewController关闭formSheet模态框并获取内容执行Segue

解决方案:用闭包实现模态视图与父视图的通信

这是iOS开发里实现模态视图向父视图传递数据最简洁直观的方案,我给你一步步拆解实现步骤:

1. 给SummaryViewController添加闭包回调属性

在你的SummaryViewController类里新增一个闭包属性,用来把输入的文本传递回父视图:

import UIKit
class SummaryViewController: UIViewController, UITextViewDelegate {
    @IBOutlet weak var summaryTV: UITextView!
    // 新增闭包属性,用于回调文本内容
    var onSaveSummary: ((String?) -> Void)?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        summaryTV.delegate = self
        summaryTV.textColor = UIColor.lightGray
        summaryTV.text = "Escriba el resumen de la visita"
    }
    
    // ... 原有其他代码保持不变 ...
    
    @IBAction func saveSummary(_ sender: Any) {
        // 处理占位符情况:如果是灰色提示文本,就返回nil,否则返回输入内容
        let inputText = summaryTV.textColor == .lightGray ? nil : summaryTV.text
        // 调用闭包,把文本传递给父视图
        onSaveSummary?(inputText)
        // 关闭模态视图
        self.dismiss(animated: true)
    }
}

2. 修改父视图的模态弹出代码,处理回调

在你弹出模态视图的代码中,给summary的闭包赋值,拿到返回的文本后执行Segue跳转:

let summary = SummaryViewController(nibName: "SummaryViewController", bundle: nil)
summary.preferredContentSize = CGSize(width: 800, height: 300)
summary.modalPresentationStyle = UIModalPresentationStyle.formSheet
// 设置闭包,接收模态视图返回的文本
summary.onSaveSummary = { [weak self] text in
    guard let self = self else { return }
    // 这里可以把文本存到父视图的属性里,供后续使用
    // self.storedSummaryText = text
    // 模态框关闭后执行Segue跳转
    self.performSegue(withIdentifier: "你的Segue标识符", sender: text)
}
self.present(summary, animated: true, completion: nil)

额外优化:Segue传递文本到目标页面

如果需要把拿到的文本传递给Segue跳转后的视图控制器,可以在prepare(for:sender:)里处理:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "你的Segue标识符" {
        // 替换成你的目标视图控制器类型
        if let targetVC = segue.destination as? TargetViewController,
           let summaryText = sender as? String {
            targetVC.receivedSummaryText = summaryText
        }
    }
}

注意:用[weak self]是为了避免循环引用导致内存泄漏,这是iOS开发的最佳实践哦。

内容的提问来源于stack exchange,提问作者user5250550

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:12:07