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

如何在文本框值为nil时取消Unwind Segue(基于现有代码)

当然可以基于现有代码实现这个需求!

不用换掉你当前通过Storyboard关联Unwind Segue的结构,也不需要改用popToRootViewController,只需要在子视图控制器里做两步简单的处理就能实现“文本框为空时取消Segue”的逻辑:


步骤1:给Unwind Segue设置标识符

打开你的Storyboard,选中那个从保存按钮指向主视图Exit的Unwind Segue,在右侧Attributes Inspector的「Identifier」栏里给它起个明确的名字(比如unwindToMainFromSave)。这一步是为了让我们在代码里能精准识别这个Segue。

步骤2:重写Segue拦截方法

在子视图控制器的代码里,重写shouldPerformSegue(withIdentifier:sender:)方法——这个方法会在Segue即将触发时被调用,我们可以在这里做条件判断,决定是否允许Segue执行。

举个Swift代码的例子:

class YourChildViewController: UIViewController {
    @IBOutlet weak var inputTextField: UITextField!
    
    override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
        // 只拦截我们设置了标识符的那个Unwind Segue
        guard identifier == "unwindToMainFromSave" else {
            // 其他Segue正常放行
            return super.shouldPerformSegue(withIdentifier: identifier, sender: sender)
        }
        
        // 检查文本框内容:去掉前后空格后是否为空
        guard let inputText = inputTextField.text, 
              !inputText.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty else {
            // 为空的话,给用户弹个提示,然后返回false取消Segue
            let alert = UIAlertController(title: "提示", message: "请输入内容后再保存哦", preferredStyle: .alert)
            alert.addAction(UIAlertAction(title: "好的", style: .default))
            present(alert, animated: true)
            return false
        }
        
        // 内容有效,放行Segue
        return true
    }
    
    // (可选)如果需要在Segue执行前完成保存到数据库的操作,可以重写这个方法
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "unwindToMainFromSave" {
            // 调用你的数据库保存逻辑
            if let text = inputTextField.text {
                saveTextToDatabase(text: text)
            }
        }
    }
    
    // 你的数据库保存方法
    private func saveTextToDatabase(text: String) {
        // 这里写保存到数据库的代码
    }
}

逻辑说明

当用户点击保存按钮时:

  1. Storyboard会尝试触发Unwind Segue
  2. shouldPerformSegue方法被调用,检查文本框内容
  3. 如果内容为空:弹出提示,返回false,Segue被取消
  4. 如果内容有效:返回true,Segue继续执行,同时你可以在prepare(for:sender:)里完成保存到数据库的操作,最后回到主视图

这种方式完全保留了你原有的Unwind Segue关联和主视图的返回逻辑,只需要添加少量代码就能实现需求,非常贴合你现有的代码结构。

内容的提问来源于stack exchange,提问作者Omar Al-Eisa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:06:03