总的来说,对SWIFT和移动开发中的编程来说都是相当陌生的.我正在try 使用performSegue()并在没有if-Else语句的情况下控制它.我在谷歌上搜索了How to Use override func shouldPerformSegue(),并试图以不同的方式实现它,但都没有解决我的问题.在这里,我需要分割到黄色或绿色的视图,如果switch 打开使用相应的按钮.即使我打了return false分,功能也不会取消分段发生.这种行为的原因是什么?我如何才能纠正它?非常感谢.

class ViewController: UIViewController {
    
    @IBOutlet var segueSwitch: UISwitch!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
    
    @IBAction func yellowButtonTapped(_ button: UIButton) {
        performSegue(withIdentifier: "Yellow", sender: nil)
    }
    
    @IBAction func greenButtonTapped(_ button: UIButton) {
        performSegue(withIdentifier: "Green", sender: nil)
    }
    
    override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
        // return segueSwitch.isOn
        return false
    }
    
}

storyboard

推荐答案

如果在代码中使用performSegue(withIdentifier:,则不会调用shouldPerformSegue.只有在从情节提要触发Segue时,才会调用此函数.

您可以很容易地测试这一点,方法是向情节提要中的一个视图控制器添加两个按钮,一个带有情节提要段的按钮,一个带有IBOutlet的按钮到新的视图控制器中.然后将print语句加到shouldPerformSegue上.在按键插座上拨打performSegue.只有执行从情节提要分段的第一个按钮才会打印到控制台.

此外,你也不需要它.在shouldPerformSegue中执行的任何验证都可以在...ButtonTapped函数中完成:

@IBAction func yellowButtonTapped(_ button: UIButton) {
    if validateSegue(){
        performSegue(withIdentifier: "Yellow", sender: nil)
    }
}

override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
    validateSegue()
}

func validateSegue() -> Bool{
    ......
}

Swift相关问答推荐

RealityKit如何获得两个相对大小相同的ModelEntity?

如何设置两个不同的视图模型以在我的SwiftUI应用程序中使用相同的数据源?

在SwiftUI中判断选项时避免重复查看

是否在核心数据中使用Uint?

SWIFT:使字典数组值可变

为什么要在SWIFT RandomAccessCollection协议中重新定义元素类型?

如何才能在同一线程上调用类中的每个方法,而不对每个调用使用同步块?

如何偏移HStack中的视图,但仍然约束框架以与偏移匹配?

如何在visionOS中将模型锚定在用户头部上方?

macOS 的窗口框架中使用的真实类型和真实类型是什么?

如何为 Swift UI 视图定义 struct ?

是否可以使任何协议符合 Codable?

如何让 UIKit 挤压你的视图,使其适合屏幕

无法从自定义动态框架(Swift)访问类

swift中的SequenceType和CollectionType有什么区别?

将项目引用添加到 Swift iOS XCode 项目并调试

关闭 UITableViewRowAction

Swift 中 NSFetchRequest 的多个 NSPredicates?

MKAnnotation Swift

Swift - 导入我的 swift 类