if-else Swift后不需要的segue

时间:2015-02-06 13:06:37

标签: ios swift

我正在检查我的标签和图像(图像是否与标签相关联,因此只需检查标签)以查看用户是否可以继续操作。如果他填写了所有细节(使用pickerView和datePicker),用户可以继续。其他用户会收到提醒以填写详细信息并应保持在同一页面上。

以下是我正在使用的代码。一切正常,但应用程序在收到警报后执行不需要的segue。

不需要的问题有两种类型:

  1. 如果我直接点击进入NEXT页面(不触及pickerViews),它会显示警告,但是当我点击OK时,它将执行上一页的segue。
  2. 另一方面,如果我根据需要完成所有细节,点击下一步(它会根据需要将我带到下一个视图控制器),如果我从该视图控制器单击BACK到初始选择器视图的所有内容按要求工作。但是,如果我单击下一步而不执行选择器视图操作,这次它会显示警报并将我带到NEXT视图控制器。
  3. 基本上问题是,

    • 如果我没有填写详细信息,我会收到提醒并获得前一个视图控制器的信息
    • 如果我填写详细信息,请单击下一步,然后单击返回到相同的选取器选择视图控制器,然后单击下一步而不触摸我得到一个segue到下一个视图控制器。

    我只是希望它在警报后留在当前视图控制器(选择器视图选择页面)。我究竟做错了什么?

    代码如下:

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    
        if (xLabel.text! != "" && yLabel.text! != "") {
    
            var user = PFUser.currentUser()
            var myGender: AnyObject! = user["gender"]
            var myName: AnyObject! = user["name"]
            var DestView : UserDetailViewController = segue.destinationViewController as UserDetailViewController
            DestView.uDetailName = "\(myName)"
            DestView.uDetailGender = "\(myGender)"
            DestView.uDetailBar = "\(xLabel.text!)"
            DestView.uDetailDate = dateLabel.text!
            DestView.uDetailBarPic = PickerViewImage.image!
            DestView.uDetailQuantity = "\(yLabel.text!)"
        } else {
    
            self.displayAlert("Could not proceed", error: "Please select 'Location' and 'Number of people' to proceed")
        }
    }
    
    func displayAlert(title:String, error:String) {
        var alert = UIAlertController(title: title, message: error, preferredStyle: UIAlertControllerStyle.Alert)
        alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: { action in
            self.dismissViewControllerAnimated(true, completion: nil)
        }))
        self.presentViewController(alert, animated: true, completion: nil)
    }
    

    我真的很感谢你的帮助。感谢。

1 个答案:

答案 0 :(得分:1)

prepareForSegue对于是否应该执行segue做出决定为时已晚 - 此时segue已经提交。

您应该实现函数shouldPerformSegueWithIdentifier。您从此函数返回一个布尔值,指示您是否希望segue继续。

override func shouldPerformSegueWithIdentifier(identifier: String!, sender: AnyObject!) -> Bool {
    if (xLabel.text! != "" && yLabel.text! != "") {
       return true
    } else {    
         self.displayAlert("Could not proceed", error: "Please select 'Location' and 'Number of people' to proceed")
       return false
    }
}