通过segue传递变量? Xcode 8 Swift 3

时间:2016-11-06 21:09:45

标签: swift xcode

所以我正在制作一个闹钟。一个视图控制器是表视图。另一个视图控制器由带有提交按钮的UIDatePicker组成。目标是当用户单击提交按钮时,它会将日期保存在日期选择器上。除了保存日期之外,它还是表视图控制器的一个区域。我试图在单元格中显示保存为标签的时间。

  1. 这是我的DatePicker视图控制器的代码。我在函数之外定义了变量。然后当他们点击提交时,它应该更新值。但是当它通过segue时它不会更新它。

     var myDate = "1:39 PM"
    
    
    
    
    @IBAction func submitDate(_ sender: AnyObject) {
    
       myDate = DateFormatter.localizedString(from: dateOutlet.date, dateStyle: DateFormatter.Style.none, timeStyle: DateFormatter.Style.short)
    
    
    }
    
    
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    
        if segue.identifier == "save" {
    
            let toViewController = segue.destination as! TableViewController
    
            toViewController.myDate = myDate
    
    
    
        }
    }
    
  2. 这是我的表视图控制器的代码。当我单击提交时,它不会将标签显示为在DatePicker中选择的时间。它显示“下午1点39分”。这是我最初定义的内容。

    var myDate = "0"
    
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    
    
    
        let cell = Bundle.main.loadNibNamed("TableViewCell", owner: self, options: nil)?.first as! TableViewCell
    
    
        cell.textLabel?.text = myDate
    
        return cell
    
    
    
    }
    

1 个答案:

答案 0 :(得分:9)

除非您稍后要使用它,否则不要在源视图控制器中声明myDate

此外,如果您的submitDate函数中没有任何代码来展示您的目标视图控制器,您可能不需要它,因为您设置的'save' segue会自动处理

在源视图控制器中

@IBAction func submitDate(_ sender: AnyObject) {

   //don't need anything here - remove this function unless doing anything else


}


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

    if segue.identifier == "save" {
        if let toViewController = segue.destination as? TableViewController {
            toViewController.myDate = DateFormatter.localizedString(from: dateOutlet.date, dateStyle: DateFormatter.Style.none, timeStyle: DateFormatter.Style.short)
        }
    }
}

在目标视图控制器中

var myDate: String!


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {



    let cell = Bundle.main.loadNibNamed("TableViewCell", owner: self, options: nil)?.first as! TableViewCell


    cell.textLabel?.text = myDate

    return cell



}