如果条件有效,则转到下一个 ViewController 并传递数据

Posted

技术标签:

【中文标题】如果条件有效,则转到下一个 ViewController 并传递数据【英文标题】:segue to next ViewController and pass data if condition is valid 【发布时间】:2016-07-04 13:16:17 【问题描述】:

我正在尝试从第一个视图控制器转移到第二个视图控制器并将var dateAndTime = NSDate() 的值传递给第二个视图控制器。

我的第一种方法是从第一个 viewcontroller 本身到第二个,在属性检查器中定义 segue 的名称。 接下来,我在第一个视图控制器中链接一个按钮@IBAction func nextButtonToFifthViewController,使用if else 语句和prepareForSegue,但代码无法编译,因为我不允许覆盖prepareForSegue

@IBAction func nextButtonToFifthViewController(sender: AnyObject) 
    if timeRestricted.contains(hourComponents)
        self.label.text = "Please choose a time betwen 7:00 - 19:00"
     else 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
        var destViewController:FifthViewController = segue.destinationViewController as! FifthViewController
        destViewController.dateAndTimeSelected = dateAndTime    
       

我的第二种方法是使用performSegueWithIdentifier,但我无法将数据传递给下一个视图控制器,因为dateAndTimeSelected 不适用于第一个视图控制器。

@IBAction func nextButtonToFifthViewController(sender: AnyObject) 
    if timeRestricted.contains(hourComponents)
        self.label.text = "Please choose a time betwen 7:00 - 19:00"
     else 

        performSegueWithIdentifier("toFifthViewController", sender: self)
  dateAndTimeSelected = dateAndTime

【问题讨论】:

在第一个代码块中,您似乎在 ibaction 函数中声明了prepareForSegue。你不能这样做,你应该关闭 ibaction 并覆盖它之外的 prepareForSegue 【参考方案1】:

注意performSegueWithIdentifierprepareForSegue 方法应该一起使用。首先,当您确定需要移动到新的视图控制器时调用performSegueWithIdentifier,然后您可以在prepareForSegue 中配置新的视图控制器

@IBAction func nextButtonToFifthViewController(sender: AnyObject) 
    if timeRestricted.contains(hourComponents)
        self.label.text = "Please choose a time betwen 7:00 - 19:00"
     else 
        performSegueWithIdentifier("toFifthViewController", sender: self)
    


override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    if segue.identifier == "toFifthViewController"  
        if let destViewController = segue.destinationViewController as? FifthViewController 
            destViewController.dateAndTimeSelected = dateAndTime
          
    

【讨论】:

以上是关于如果条件有效,则转到下一个 ViewController 并传递数据的主要内容,如果未能解决你的问题,请参考以下文章