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

如何通过条件判断阻止导航至UIViewController?

解决Segue跳转前条件检查的问题

我明白你的困扰——你想在跳转到ViewControllerIncluirItem前先检查pricelist是否不为空,但在prepare(for:sender:)里写return根本拦不住跳转,对吧?这是因为prepare方法是在segue已经启动执行之后才会被调用的,这里的return只能提前结束当前方法的逻辑,没法取消已经触发的跳转流程。

给你两种靠谱的解决办法:

方法一:用shouldPerformSegue拦截segue

苹果专门提供了shouldPerformSegue(withIdentifier:sender:)方法,用来决定是否允许执行某个segue。返回true就执行跳转,返回false就直接拦截。

把这段代码加到你的视图控制器里:

override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
    // 只处理目标segue
    if identifier == "SegueToVcIncluirItem" {
        // 检查pricelist是否存在
        guard pricelist != nil else {
            print("selecione pricelist")
            // 这里还可以给用户加个弹窗提示,比如:
            // let alert = UIAlertController(title: "提示", message: "请先选择pricelist", preferredStyle: .alert)
            // alert.addAction(UIAlertAction(title: "确定", style: .default))
            // present(alert, animated: true)
            return false // 不执行跳转
        }
        return true // 条件满足,允许跳转
    }
    // 其他segue默认允许执行
    return true
}

之后你的prepare(for:sender:)方法可以保留原来的传值逻辑,不用再做条件检查了——因为只有条件满足时,segue才会触发,才会进入prepare方法:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "SegueToVcIncluirItem" {
        let nav = segue.destination as! UINavigationController
        let childVc = nav.topViewController as! ViewControllerIncluirItem
        childVc.strTeste = "testado com sucesso"
    }
}

方法二:手动触发Segue(去掉按钮的自动关联)

如果不想用系统的拦截方法,你可以把storyboard里按钮和segue的关联删掉(就是不要从按钮直接拖线到目标VC),改成给按钮加点击事件,在事件里检查条件,满足后再手动调用segue:

  1. 在storyboard里给按钮添加IBAction:
@IBAction func goToIncluirItemTapped(_ sender: UIButton) {
    guard pricelist != nil else {
        print("selecione pricelist")
        // 同样可以加弹窗提示用户
        return
    }
    // 条件满足,手动触发segue
    performSegue(withIdentifier: "SegueToVcIncluirItem", sender: sender)
}
  1. 同样保留原来的prepare(for:sender:)传值逻辑即可。

这两种方法都能解决你的问题,推荐第一种shouldPerformSegue的方式,更贴合iOS的segue设计模式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:16:18