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 B
到 ViewController 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的主要内容,如果未能解决你的问题,请参考以下文章