2017-06-25 28 views
0

Ich habe Entitäten Setup in Kerndaten, wo ich möchte die Tage speichern, dass der Benutzer ausgewählt hat und die Zeit von der Datumsauswahl:Speichern von Daten aus Tabellenansicht

Für z.B. enter image description here

Ich möchte sparen Montag, Mittwoch, Freitag und 22.07. Ich kann den Datumswähler an den Viewcontroller anschließen, um die Zeit zu erhalten. Wie kann ich die ausgewählten Tage speichern?

Versuch 1:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
    { 
     let indexPath = tableView.indexPathForSelectedRow 
     let currentCell = tableView.cellForRow(at: indexPath!)! as UITableViewCell 
     print(currentCell.textLabel!.text) 
    } 

return nil

Versuch 2

print("You selected \(indexPath.row.description)") 

erfolgreich die Zeilennummer der Zelle zurück, nicht aber die UILabel Beschreibung.

Mehr Infos

Die Tage der Woche als UILabel gespeichert, wie unten: enter image description here

Versuch 3:

print(currentCell.contentView.description) 

Ich habe auch versucht, einen Navigation-Controller hinzufügen um oben rechts eine Schaltfläche zum Speichern hinzuzufügen, die auch nicht zu funktionieren scheint (die Schaltfläche zum Speichern wird unten links angezeigt) aus irgendeinem Grund).

Würde mich freuen, jede Hilfe bitte! Vielen Dank.

+0

Es sieht so aus, als hätten Sie keine IBOutlets für jedes UILabel erstellt, das den Wochentag darstellt, und es mit Ihrem ViewController verbunden. Andernfalls können Sie den UILabel.text-Wert nicht aus dem Code referenzieren. –

+0

Danke für die Antwort @MartinMuldoon.Das habe ich jetzt getan. Wenn der Benutzer beispielsweise Montag und Donnerstag auswählt, wie kann ich mondayLabel und ThursdayLabel erkennen und speichern, um gelesen zu werden? – Has

+0

Sie haben es mit didSelectRowAtIndexPath sicherlich richtig gemacht. Ich füge unten ein bisschen Code hinzu. –

Antwort

2

tableView:didSelectRowAt funktioniert in dynamischen und statischen Zellen ähnlich.

Verwenden Sie die Methode indexPathsForSelectedRows (Mehrzahl), um alle aktuell ausgewählten Indexpfade zu erhalten, verwenden Sie dann ein Array, um die Wochentage zu erhalten, anstatt die Informationen aus den Zellen zu sammeln.

Der Code ordnet die Indexpfade von Abschnitt 0 ihren Zeilen zu und ordnet die Zeilen den entsprechenden Wochentagen zu.

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    let weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] 
    if let selectedRows = tableView.indexPathsForSelectedRows { 
     let rows = selectedRows.filter {$0.section == 0}.map{ $0.row} 
     let filteredWeekdays = rows.map{ weekdays[$0] } 
     print(filteredWeekdays) 
    } 
} 

Wenn Sie auch eine Zelle den gleichen Code in tableView:didDeselectRowAt zum Beispiel

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    selectedWeekdays() 
} 

override func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { 
    selectedWeekdays() 
} 

func selectedWeekdays() 
{ 
    let weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] 
    if let selectedRows = tableView.indexPathsForSelectedRows { 
     let rows = selectedRows.filter {$0.section == 0}.map{ $0.row} 
     let filteredWeekdays = rows.map{ weekdays[$0] } 
     print(filteredWeekdays) 
    } 
} 

verwenden Abwählen fangen wollen Betrachten Sie die Indizes der Wochentage in Core Data anstatt die Zeichenfolge-Werte zu speichern. Dann können Sie die Zeilen direkt verwenden.

+0

Danke Vadian! Tut mir leid, ich war krank und konnte nicht früher antworten. Können Sie dies bitte bitte erklären: https://pastebin.com/sRHnQTP1 Mein Verständnis ist, dass, wenn selectedRows wahr ist, selectedRows gefiltert und in einer bestimmten Weise zugeordnet wird. – Has

+0

Ihr Verständnis ist richtig. – vadian

+0

Können Sie uns bitte erklären, was gefiltert wird und was abgebildet wird? Für z.B. was bedeutet das und was macht es {$ 0.section == 0} .map {$ 0.row} und gleiches mit dieser einen rows.map {wochentage [$ 0]}. Danke! – Has

0

Ich benutze Reuse Identifiers .. Montag, Dienstag, etc. Ich habe auch ein Array erstellt, um die ausgewählten Werte zu halten. Stellen Sie sicher, dass Sie didDeselectRow implementieren, um Werte aus dem Array zu entfernen.

import UIKit 

class NewTableViewController: UITableViewController { 
    @IBOutlet weak var monday: UILabel! 
    @IBOutlet weak var tuesday: UILabel! 
    @IBOutlet weak var wednesay: UILabel! 

    var selectedDays: [String] = [] 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    // MARK: - Table view data source 

     override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     let identifier = tableView.cellForRow(at: indexPath)?.reuseIdentifier as! String 
      print(identifier) 
      switch identifier { 
      case "Monday": 
       selectedDays.append(identifier) 
      case "Tuesday": 
       selectedDays.append(identifier) 
      case "Wednesday": 
       selectedDays.append(identifier) 
      default: 
       return 
      } 
     print(selectedDays.count) 
    } 

    override func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { 
     let identifier = tableView.cellForRow(at: indexPath)?.reuseIdentifier as! String 
     print(identifier) 
     switch identifier { 
     case "Monday": 
      selectedDays.remove(at: indexPath.row) 
     case "Tuesday": 
      selectedDays.remove(at: indexPath.row) 
     case "Wednesday": 
      selectedDays.remove(at: indexPath.row) 
     default: 
      return 
     } 
     print(selectedDays.count) 
    } 
} 
+0

Danke nochmal Martin. Für z.B. eines meiner Outlets heißt @IBOutlet weak var DienstagLabel: UILabel! Also, wenn ich schreibe, dass selectedDayOfWeek = tableView.cellForRow (at: indexPath) !. DienstagLabel.text in didSelectRowAt, bekomme ich eine Fehlermeldung, dass der Wert des Typs 'UITableViewCell' hat kein Mitglied 'DienstagLabel'. – Has

Verwandte Themen