如何停止跳转下一个视图控制器? (SWIFT)

时间:2017-01-06 11:28:39

标签: ios swift swift3 segue uistoryboardsegue

我正在使用segue将数据从viewController发送到destinationViewController。我设置按钮并使用push segue连接到下一个视图控制器。在第一个视图中,我设置了一个布尔值来检查图像是否为空。如果有空,则会弹出警报提醒用户。如果成功,它会将图像发送到下一个视图控制器。

虽然我可以传输图像并弹出警报,但如果有空的话,它也会跳转到下一个视图控制器。此外,跳转到下一个视图控制器后,而不是在第一个视图控制器

中弹出警报

现在,这是代码

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if Jumpsuit.isHidden == false && self.Hair.image != nil && self.Jumpsuit.image != nil && self.Shoes.image != nil {

        let DestViewController : ChooseBGViewController = segue.destination as! ChooseBGViewController

        DestViewController.imgHair = Hair.image
        DestViewController.imgJumpsuit = Jumpsuit.image
        DestViewController.imgShoes = Shoes.image
        DestViewController.dressingtype = 1
    } else if Jumpsuit.isHidden == false && self.Hair.image == nil || self.Jumpsuit.image == nil || self.Shoes.image == nil {
        let alert = UIAlertView()
        alert.title = "No Image"
        alert.message = "Please check again"
        alert.addButton(withTitle: "OK")
        alert.show()

    }
}

如何停止跳转到下一个视图控制器并在第一个视图控制器中弹出警报。请帮忙!

2 个答案:

答案 0 :(得分:5)

您可以使用shouldPerformSegue(withIdentifier:sender:)并根据您的条件返回Bool值。

override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
    if Jumpsuit.isHidden == false && self.Hair.image == nil || self.Jumpsuit.image == nil || self.Shoes.image == nil {
         //Show UIAlertController instead of UIAlertView it is deprecated
         return false
    }
    return true
}

答案 1 :(得分:0)

当用户点击按钮时,您将使用首先检查您需要的IBAction(图像..),然后您可以使用2种方法:

  1. 您现在可以使用performSegue来触发已知的prepareForSegue并使用您创建的segue
  2. 您可以按照以下方式使用instantiateViewController(withIdentifier:方法(并且不要忘记断开segue):

    let nextVC = storyboard?.instantiateViewController(withIdentifier: "YourViewControllerID")
    self.present(nextVC!, animated: true, completion: nil)
    

    或者如果你有导航控制器:

    self.navigationController?.pushViewController(nextVC!, animated: true)