TableView: Über Cell Identifier die Objekte zurück bekommen..

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • TableView: Über Cell Identifier die Objekte zurück bekommen..

    Ich glaube der Code erklärt einiges bzw was ich vor hatte.....print liefert nicht plausible werte zurück es scheint so das ich zu jedem neue "didselect..." ein anderes Objekt von Tabelview zurück bekomme wobei ich immer die selbe Zeile anklicke.
    Gruß

    Quellcode

    1. func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    2. tableView.deselectRowAtIndexPath(indexPath, animated: false)
    3. let cell = tableView.dequeueReusableCellWithIdentifier("setupCell", forIndexPath: indexPath) as! TableCell
    4. var back = cell.graphSwitch.selectedSegmentIndex
    5. print(back)
    6. tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None)
    7. }
  • Jok3r schrieb:

    Ich glaube der Code erklärt einiges
    Der erklärt eigentlich nur, dass du die Funktionsweise eines Tableviews noch nicht so ganz verstanden hast und keine Doku liest. ;)

    Wenn du eine Lösung für deine Probleme haben willst, solltest du aufschreiben, was du vorhast und was nicht funktioniert. Ein einfaches „Is kaputt“ kling nicht sehr erwachsen.

    Jok3r schrieb:

    tableView.dequeueReusableCellWithIdentifier("setupCell", forIndexPath: indexPath) as! TableCell
    Willst du hier wirklich eine neue Zelle erzeugen? Schau doch mal in die Doku.
    „Meine Komplikation hatte eine Komplikation.“
  • Ich habe eine klasse als Vorlage für jede Zelle ...

    Quellcode

    1. import UIKit
    2. class TableCell: UITableViewCell {
    3. @IBOutlet weak var fileLabel: UILabel!
    4. @IBOutlet weak var graphSwitch: UISegmentedControl!
    5. }
    mein Tableview erzeugt damit jeweils eine Cell, jetzt repräsentiert der Tableview nur ein Menü in dem man Einstellungen tätigen kann. Diese Einstellungen sollen mit NSUserDefault abgespeichert werden, da ich sie nach einen Neustart oder an anderen stellen wieder verwenden will.
    Jetzt wollte ich deshalb nur auf die Cells zugreifen bzw deren Objekte. Später sollten die Einstellungen durch einen Button mit NSUserDefault gespeichert werden. In dem oberen Beispiel wollte ich nur herausfinden wie man auf die Objekte zugreifen kann.
  • Ich glaube wir reden gerade aneinander vorbei. Der Tableview ist eine Liste in der Parameter für einen Graphen gesetzt werden. Filelabel zeigt den Namen der Graph-linie an und graphSwitch gibt mir de Möglichkeit die linie auszublenden oder an die linke oder an die rechte X achse zu binden.

    Gruß :)
  • Dein erster Beitrag zeigt den Inhalt einer Methode mit dem Kommentar, dass wir den Fehler schon mehr oder weniger selber sehen. Einen offensichtlichen Fehler habe ich dir bereits in meiner ersten Antwort genannt. Der Hinweis hat dir entweder nicht geholfen, du hast ihn übersehen oder nicht verstanden. Ich weiß es nicht, da du daruaf nicht geantwortet hast. Deine weiteren Beiträge führen jedenfalls von deinem ursprünglichen Problem weg.

    Tu mal so, als wenn du dein Programm nicht kennen würdest, und lies mal deine Beiträge. Am besten konzentrierst du dich auf die Darstellung des Problems.
    „Meine Komplikation hatte eine Komplikation.“
  • Wie @macmoonshine gesagt erstellst du in deiner Funktion eine neue Zelle und wählst nicht die selektiere aus. Bzw. es muss nicht um bedingt eine neue Zelle erstellt werden, sondern kann auch eine Zelle sein, welche nicht mehr im sichtbaren Bereich ist. Daher bekommst du nicht die Werte die du haben möchtest.

    Suche mal in der Dokumentation für UITableViews nach einer Funktion selectedCellAtIndexPath (oder so ähnlich). Diese könnte dir bei deinem Problem helfen.
  • Ich hab mich die Tage mit protocol und delegate s beschäftigt und siehe da es funktioniert, ich hatte einen grundsätzlichen Denkfehler bei dem ganzen.
    Der line-graph kann jetzt aus dem Tableview bedient werden bzw gesteuert werden.

    Mein nächstes Ziel wäre die Schnittstellen zum Graph zu optimieren. Bisher gibt es bei mir eine Klasse mit Funktionen die Werte in einem Array speichern und wieder zurück liefern können.
    Blöderweise ist bzw. wird sich diese Schnittstelle jederzeit verändert können, je nach dem welches Endgerät mit dem Iphone kommuniziert.

    Quellcode

    1. //
    2. // Datalogs_Dic.swift
    3. // iEcm
    4. //
    5. // Created by Dominik Loher on 03.04.16.
    6. // Copyright © 2016 Dominik Loher. All rights reserved.
    7. //
    8. import Foundation
    9. protocol standard {
    10. func standard(R: Double, G: Double, B: Double) -> [Dictionary<String, Double>]
    11. }
    12. protocol interface{
    13. func typA(Time: Double, pos: Double) -> [Dictionary<String, Double>]
    14. func typB(Time: Double, Number: Double) -> [Dictionary<String, Double>]
    15. func typC(Timestamb: Double, pos: Double) -> [Dictionary<String, Double>]
    16. }
    17. class DataLogs: interface {
    18. var logs: [Dictionary<String, Double>] = []
    19. let doCreateInterface: AnyObject
    20. /*
    21. * Set typ
    22. */
    23. init(a : interface){
    24. self.doCreateInterface = a
    25. }
    26. /*
    27. * get SensorData from Buffer File
    28. */
    29. func getData() ->[Dictionary<String, Double>] {
    30. return logs
    31. }
    32. /*
    33. * write SensorData into Buffer File
    34. */
    35. func dataAppend<T: doCreateInterface>(data: T){
    36. let dictionary = data
    37. logs.append(dictionary)
    38. }
    39. /*
    40. * clear SensorData
    41. */
    42. func clear() {
    43. print("Clearing \(logs.count) elements.")
    44. logs.removeAll()
    45. }
    46. }
    Alles anzeigen

    Zum Ablauf:

    dataAppend() bekommt von einem Gerät Daten übermittelt, diese Daten sind zwischen 80 - 120 Byte lange.
    Die Byte s müssen danach Werten zugewiesen werden wie zum Beispiel Byte 1 ist der Wert Time , Time wird im Protokoll definiert . Ist es beim nächsten mal ein anderes Gerät , kann es vorkommen das es den Wert Time gar nicht gibt sondern dieses mal gibt es Timestamp und der findet sich auf Byte 10

    Soviel ich bisher weiß würden sich dafür Protokolle anbieten, ist dieser Ansatz realistisch.

    Ich hoffe ich habe mich gut genug ausgedrückt, im Kopf würde ich den Weg schon erahnen können aber das wars dann. Es könnte ja sein das es gar nicht so möglich wäre wie ich mir das vorstelle oder das Swift dafür was besseres liefern könnte.

    Gruß

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von Jok3r ()