if Condition 在执行 segue 之前为 True

Posted

技术标签:

【中文标题】if Condition 在执行 segue 之前为 True【英文标题】:if Condition is True before it performs segue 【发布时间】:2018-10-22 02:34:45 【问题描述】:

我正在使用 segue 进行从 ViewController BViewController A 的转换,同时我正在使用 segue 将数据从 ViewController B 传递到 ViewController A。我已经构建了我的代码,其中用户将点击backbutton 并使用SCLAlertView cocoapods 执行alert controller。它在进入下一个ViewController之前提示,但是当我运行它时,segue会自动执行而不先检查条件并且它没有执行alert controller。我的代码在下面供您参考。希望您能帮助我解决这个问题,因为我是 swift 新手,我进行了研究,但似乎我看不到适用于我的问题的解决方案。谢谢。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    if segue.identifier == "showVCA" 
        if let vc_A = segue.destination as? ViewControllerA 
            vc_A.validPincode = validPincode
            vc_A.participants = participants
            vc_A.event = event
        
    




 @IBAction func backbutton(_ sender: UIButton) 
    let alert = SCLAlertView(appearance: confirmationAppearance)
    _ = alert.addButton("Leave", action: 
        self.dismiss(animated: true, completion: nil)
        self.performSegue(withIdentifier: "showVCA", sender: sender)

    )
    _ = alert.addButton("Stay", action:  )
    _ = alert.showError("Confirmation", subTitle: "Are you sure you want to leave this page?")


【问题讨论】:

【参考方案1】:

验证应该在performSegue之前完成,一旦你performSegue意味着你已经执行了代码以移动到下一个ViewController。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    if segue.identifier == "showVCA" 
        if let vc_A = segue.destination as? ViewControllerA 
            vc_A.validPincode = validPincode
            vc_A.participants = participants
            vc_A.event = event
        
    




@IBAction func backbutton(_ sender: UIButton) 
    let alert = SCLAlertView(appearance: confirmationAppearance)
    _ = alert.addButton("Leave", action: 
        self.dismiss(animated: true, completion: nil)
        if validation() 
            self.performSegue(withIdentifier: "showVCA", sender: sender)
        

    )
    _ = alert.addButton("Stay", action:  )
    _ = alert.showError("Confirmation", subTitle: "Are you sure you want to leave this page?")



func validation() -> Bool 
     // add validation logic here
     return false

【讨论】:

我将如何构建它? @Titus 添加了验证示例 检查是否应该执行segue的首选方法是实现UIViewController.shouldPerformSegue(withIdentifier:sender:) @ZaidM.Said 嗨,如果用户点击警报控制器中的Leave 按钮,我该如何设置验证。它将关闭 ViewController B 并执行Segue?对不起,我真的很困惑。 @Titus 验证应该在当前控制器中完成(在我的例子中,代码应该在函数validation())一旦验证完成(返回true),然后performSegue将被执行。 【参考方案2】:

您的backbutton() 函数似乎没有显示警报控制器(通过调用SCLAlertView 的许多showXXX() 函数之一),因此不会显示任何内容。您的按钮是否有可能连接到视图控制器的退出而不是操作?

【讨论】:

以上是关于if Condition 在执行 segue 之前为 True的主要内容,如果未能解决你的问题,请参考以下文章

如何在执行segue之前执行按钮动画[重复]

在执行自定义 segue 之前禁用工具栏 UIBarButtonItem

在执行 segue 之前如何显示加载指示器?

如何在触发退出 segue 之前执行操作?

在没有底层闪存的情况下,如何在视图出现之前执行Segue?

动画后执行 Segue,但动画项目回到之前的位置