2015-02-06 39 views
1

我正在检查我的标签和图像(图像是否与标签链接,因此只是检查标签)以查看用户是否可以继续。如果他已经填充所有的细节(使用pickerView和datePicker),用户可以继续。否则,用户会收到警报以填写详细信息,并应保持在同一页面上。if-else之后不需要的segue Swift

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

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

  1. 如果我直接点击进入下一页(不接触pickerViews),它会告诉我的警告,但是当我点击确定,它会执行一个原因请看上一页。另一方面,如果我根据需要完成所有细节,请单击NEXT(根据需要将我带到下一个视图控制器),并且如果从该视图控制器单击BACK返回到初始选取器视图的所有内容,都将按需要工作。但是,如果我不点击下一步而不执行选取器视图操作,则此时它会向我显示警报并将我带到NEXT视图控制器。

所以基本上问题是,

  • ,如果我不填细节,我得到警报,并获得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

prepareForSegue为判断是否应该执行segue还为时太晚 - 此时segue已经落实。

您应该执行功能shouldPerformSegueWithIdentifier。你从这个函数返回一个布尔值,指出你是否想继续继续。

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 
    } 
} 
+0

谢谢。我的理解是,现在我首先检查是否符合条件,如果满足,则继续执行,否则将显示警报。所以现在我有两个功能 - 一个应该执行带有标识符和prepareForSegue的Segue。但我仍然遇到同样的问题。是因为我搞乱了目标视图控制器吗?我很抱歉,我是编码方面的新手,所以可能在这里讲愚蠢。希望你的帮助。谢谢。 – 2015-02-06 15:49:07

+0

您可以谈谈选取器视图,但是您正在检查两个标签的值,因此您可能在将数据从选取器视图复制到这些标签时,或者与您如何将故事板上的链接复制到故事板时有一些问题 - 这里的代码不会导致你所描述的问题 – Paulw11 2015-02-06 20:19:21

+0

非常感谢。我会检查我的代码,看看我能否解决问题。 – 2015-02-07 02:41:07