2016-11-06 74 views
4

所以我创建了一个闹钟。一个视图控制器是一个表视图。另一个视图控制器由一个带有提交按钮的UIDatePicker组成。目标是当用户点击提交按钮时,它将日期保存在日期选择器上。除了保存日期之外,它还是表格视图控制器的一部分。我试图显示保存为单元格中标签的时间。通过segue传递变量? Xcode 8 Swift 3

  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 
    
    
    
    } 
    

回答

8

别再费心寻找,除非你打算以后使用它在你的源视图控制器申报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 



}