2016-11-06 5 views
4

Also erstelle ich einen Wecker. Ein View-Controller ist eine Tabellenansicht. Der andere View-Controller besteht aus einem UIDatePicker mit einer Submit-Schaltfläche. Das Ziel besteht darin, dass der Benutzer, wenn er auf die Schaltfläche Senden klickt, das Datum auf der Datumsauswahl speichert. Es speichert nicht nur das Datum, sondern auch den Tabellenansicht-Controller. Ich versuche, die gespeicherte Zeit als Etikett in der Zelle anzuzeigen.Eine Variable durch ein Segment übergeben? Xcode 8 Swift 3

  1. Dies ist mein Code für den DatePicker View Controller. Ich habe die Variable außerhalb der Funktion definiert. Wenn sie dann auf "Senden" klicken, sollte sie den Wert aktualisieren. Es aktualisiert es jedoch nicht, wenn es durch das Segment geht.

    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. Dies ist mein Code für den Tabellenansicht-Controller. Wenn ich auf "Senden" klicke, wird die Bezeichnung nicht als die im DatePicker gewählte Zeit angezeigt. Es zeigt "1: 39 PM". So habe ich es ursprünglich definiert.

    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 
    
    
    
    } 
    

Antwort

8

nicht Stören Sie versuchen myDate in Ihrem Source-View-Controller zu erklären, wenn Sie es wollen später verwenden.

Wenn Sie keinen Code in Ihrer submitDate-Funktion haben, um Ihren Zielansicht-Controller zu präsentieren, brauchen Sie ihn wahrscheinlich nicht, da Ihr 'save'-Segment dies automatisch erledigt.

In Quellensicht Controller

@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) 
     } 
    } 
} 

In Ziel-View-Controller

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 



}