• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

CustomCell in dynmamic Table

SpecialFighter

Fießers Erstling
Registriert
25.04.12
Beiträge
131
wie ganau stellst du dir das vor? kann dir gerade nicht sinnvoll folgen
 

ecco55

Tokyo Rose
Registriert
26.10.14
Beiträge
71
Code:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
   
        let cell = tableView.dequeueReusableCellWithIdentifier("LebensmittelCell") as! ModifyCells
   
   
        if x == false {
            if (indexPath.row == 0) {
                cell.Name.text = "Static Cell"
                return cell
            }
        } else {
                      var LM_ITEM = lebensmittel[indexPath.row]
                     cell.Name.text = LM_ITEM_NAME
   
                     return cell
        }
    }

müsste so auch gehen. weil wenn row == 0, brauchen wir hier LET_ITEM ja nicht. und wenn x == false gibt es ja nur so viele row's wie es auch values im array gibt
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
möcht gerne, wenn var x == true das eine Static Cell als erste Cell angezeigt wird und darunter die dynamischen cells.
Eine UITableView hat entweder nur statische oder dynamische Zellen. Eine Mischung der beiden Arten ist nicht möglich. Man kann das aber mit einer dynamischen UITableView simulieren.

Ich dachte, wenn x == true ist, soll eine zusätzliche Zelle am Anfang der Tabelle angezeigt werden. Die letzten Codeschnipsel machen aber genau das Gegenteil. Die Sache ist doch eigentlich recht einfach, wenn man mal logisch vor geht:

Anzahl der Zeilen
Wenn x == true, dann erhöht sich die übliche Anzahl der Zeilen um eins.
Wenn x == false, dann bleibt Anzahl der Zeilen unverändert.​

Konfiguration der Zellen
Wenn x == true und die indexPath.row == 0 ist, gibt man die simulierte „statische Zelle“ zurück.
Wenn x == true und die indexPath.row > 0 ist, gibt man die „Datenzelle“ zurück mit den Daten für indexPath.row - 1.
Wenn x == false, gibt man die „Datenzelle“ zurück mit den Daten für indexPath.row.​

Das ist doch schon alles. Das in Code umzusetzen ist jetzt nur noch das kleine 1x1 des Programmierens.
 

SpecialFighter

Fießers Erstling
Registriert
25.04.12
Beiträge
131
sry jetzt nicht falsch verstehen - kann dir komplett folgen und finde es auch sehr sinnvoll - schau mir aber gerade meinen code an und stehe total aufm schlauch ...

Außerdem ist die Erklärung so nicht richtig

Konfiguration der Zellen
Wenn x == true und die indexPath.row == 0 ist, gibt man die simulierte „statische Zelle“ zurück
Wenn x == true und die indexPath.row > 0 ist, gibt man die „Datenzelle“ zurück mit den Daten für indexPath.row - 1.
Wenn x == false, NUR DIE DATEN FÜR indexPath.row.
 
Zuletzt bearbeitet:

ecco55

Tokyo Rose
Registriert
26.10.14
Beiträge
71
Ich denke MacApple meinte das so:
Code:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
  
    let cell = tableView.dequeueReusableCellWithIdentifier("LebensmittelCell") as! ModifyCells
  
    if x == true {
        if indexPath.row == 0 {
            cell.Name.text = "Static Cell"
        } else if indexPath.row > 0 {
            var LM_ITEM = lebensmittel[indexPath.row-1]
            cell.Name.text = LM_ITEM.Name
        }
    } else {
        var LM_ITEM = lebensmittel[indexPath.row]
        cell.Name.text = LM_ITEM.Name
    }
    return cell
}

über die Tatsache, dass man hier 2 mal die variable LM_ITEM deklariert, lässt sich streiten, sollte aber dennoch helfen.
 

SpecialFighter

Fießers Erstling
Registriert
25.04.12
Beiträge
131
die Zelle
cell.Name.text = LM_ITEM.Name sieht in dem Beispiel jetzt wenig aus, aber im endeffkt passieren noch viele Berechnungen in meinem Code bei dem einfügen der dynamischen Zellen.
Diese ganzen Code Zeilen kämmen lt. deinem Beispiel ja dann doppelt vor - kann man das eleganter lösen?

Wenn ich jetzt keinen Denkfehler habe, ist es das hier, was ich mir vorstelle:
Bildschirmfoto 2015-08-25 um 14.39.43.png
 
Zuletzt bearbeitet:

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
Außerdem ist die Erklärung so nicht richtig

Konfiguration der Zellen
Wenn x == true und die indexPath.row == 0 ist, gibt man die simulierte „statische Zelle“ zurück
Wenn x == true und die indexPath.row > 0 ist, gibt man die „Datenzelle“ zurück mit den Daten für indexPath.row - 1.
Wenn x == false, NUR DIE DATEN FÜR indexPath.row.
Verstehe nicht, was du mir sagen willst. Meine Erklärung ist korrekt! Die Methode tableView(_:cellForRowAtIndexPath: ) muss immer eine, idealer Weise anhand der Daten konfigurierte, UITableViewCell zurückgeben, keine Daten.

Diese ganzen Code Zeilen kämmen lt. deinem Beispiel ja dann doppelt vor - kann man das eleganter lösen?
Ja, das kann mann eleganter lösen. Du musst nur mal überlegen, wie du die identischen und unterschiedlichen Codeteile so kombinierst, dass das selbe Ergebnis raus kommt. Das ist jetzt aber deine Hausaufgabe.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: ecco55

SpecialFighter

Fießers Erstling
Registriert
25.04.12
Beiträge
131
habs jetzt hinbekommen - läuft alles perfekt.
allerdings weiß ich noch nicht wie ich diese Zeile vorweg richtig deklariere:

let LM_ITEM = lebensmittel[indexPath.row]

was fürn Typ ist LM_ITEM?

lebensmittel wird so deklariert:
var lebensmittel = [LM_ITEMS]()
 

ecco55

Tokyo Rose
Registriert
26.10.14
Beiträge
71
Naja ich würd es als Array machen vom Typ Lebensmittel.
 

SpecialFighter

Fießers Erstling
Registriert
25.04.12
Beiträge
131
auch wen ich mich jetzt dumm anstelle, aber könntest du mir zeigen wie? habe jetzt alle mögliche kombinationen probiert und egal wie ich es mache - ich mache es falsch und verzweifel :/