• 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
Hallo alle zusamme,

ich habe aktuell ein großes Problembei der Umsetzung folgender Situation:

Habe einen ViewController mit einer Table drin - Cell dynamisch.
möcht gerne, wenn var x == true das eine Static Cell als erste Cell angezeigt wird und darunter die dynamischen cells.
wenn var x == false soll die Static Cell überhaupt nicht angezeigt werden.

jemand ne Idee wie ich das mit Swift lösen kann?
 

ecco55

Tokyo Rose
Registriert
26.10.14
Beiträge
71
Wenn du mit Static Cells arbeiten willst brauchst du einen TableViewController
 

SpecialFighter

Fießers Erstling
Registriert
25.04.12
Beiträge
131
warum klappt das denn mit table im viewcontroller nicht? dynmaische cells funktionieren schon ohne Probleme
 

ecco55

Tokyo Rose
Registriert
26.10.14
Beiträge
71
Ja, aber Probier mal aus im Interface builder beim TableView die Cells von Dynamic auf Static zu setzen. Dann bekommst du einen Fehler angezeigt. Aber warum das so ist, weiß ich auch nicht. Aber deine Idee ist sogar ganz einfach. Du brauchst du Zelle doch gar nicht Static zu setzen. Lass sie doch Dynamic. Und in der DataSource Methode "cellForRowAtIndexPath" machst du einfach eine If abfrage. Wenn indexPath.row == 0, also erste Zelle, dann setzt du da Werte ein und ansonsten über Else die restlichen Dynamic. Wenn du verstehst was ich meine. Und wenn die "Static" cell ans Ende soll machst du 2 sections und dann machst du das selbe wie ich beschrieben hab, mit der Anfrage, nur das du dann indexPath.section abfragst.
 

SpecialFighter

Fießers Erstling
Registriert
25.04.12
Beiträge
131
ja so ähnlich wollte ich es auch lösen. aber ich habe dann folgendes problem:
wenn indexpath.row == 0 dann blende meine Static Cell ein und danach dann mein dynamic content.

Problem ist aber, wenn er die zweite Zelle einfügt, dann ist ja row == 1 und somit überspringt er einen Datensatz aus meinem CoreData, welchen ich so einbinde:

CoreData[indexPath.row]

weil es wäre beim zweiten Durchlauf ja CoreData[1] und nicht mehr CoreData[0]
 

SpecialFighter

Fießers Erstling
Registriert
25.04.12
Beiträge
131
war auch meine Überlegung.
habe folgenden Code bislang:

Code:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
       
        let cell = tableView.dequeueReusableCellWithIdentifier("DynamicCell") as! ModifyCells
       
        if x == true {
            if (indexPath.row == 0) {
                cell.Label.text = "Static Cell"
                return cell
            }
            var CoreData = CD[indexPath.row-1]
        } else {
            var CoreData = CD[indexPath.row]
        }
       
  
       
        cell.Label.text = CoreData.Name
       
        return cell
    }


Fehler habe ich dann bei der Zeile cell.Label.text = CoreData.Name
Use of unresolved identifier 'CoreData'
 

ecco55

Tokyo Rose
Registriert
26.10.14
Beiträge
71
Ist ja logisch. Die Variable CoreData ist nur in der If abfrage und somit kann cell.Label.text nicht darauf zugreifen. Daher musst du die Variable CoreData vor der Abfrage einmal deklarieren.
 

SpecialFighter

Fießers Erstling
Registriert
25.04.12
Beiträge
131
Wie deklare ich diese?
hatte es schon mal versucht mit var CoreData:String
Aber string ist definitv nicht der richtige typ - komme aber nicht auf die Lösung :/
 

ecco55

Tokyo Rose
Registriert
26.10.14
Beiträge
71
Sonst mache es doch so:
Code:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
      
        let cell = tableView.dequeueReusableCellWithIdentifier("DynamicCell") as! ModifyCells
      
        var CoreData = CD[indexPath.row]
        if x == true {
            if (indexPath.row == 0) {
                cell.Label.text = "Static Cell"
                return cell
            }
            CoreData = CD[indexPath.row-1]
        }
        cell.Label.text = CoreData.Name
      
        return cell
    }
 

SpecialFighter

Fießers Erstling
Registriert
25.04.12
Beiträge
131
@ecco55

dann bekomm ich folgende Fehlermeldung:
fatal error: Array index out of range

bei Zeile:
var CoreData = CD[indexPath.row]
 

SpecialFighter

Fießers Erstling
Registriert
25.04.12
Beiträge
131
habe vorher auch noch diesen code - bin mir nicht sicher ob der so richtig ist:
Code:
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if x == true {
            return CD.count+1
        } else {
            return CD.count
        }
    }
 

ecco55

Tokyo Rose
Registriert
26.10.14
Beiträge
71
Dann muss da ein Fehler bei CD sein. Ich geh mal davon aus das CD ein Array von NSManagedObject ist ? Sonst schick mal einmal, von welchem Typ das ist und wie bei dir die Daten Gefetched werden. Der Fehler muss dann nämlich dort irgendwie liegen
 

SpecialFighter

Fießers Erstling
Registriert
25.04.12
Beiträge
131
Stelle jetzt meinen richtigen Code zur Verfügung.
Vorherige Codes waren Beispiele:

Code:
    let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
    var lebensmittel = [LM_ITEMS]()

  
/*************** DATEN ABRUFEN ***************/
    func DatenAbrufen() {
      
        let fetchRequest = NSFetchRequest(entityName: "LM_ITEMS")
      
        if let fetchResults = managedObjectContext!.executeFetchRequest(fetchRequest, error: nil) as? [LM_ITEMS] {
            lebensmittel = fetchResults
        }
        LebensmittelTable.reloadData()
    }
  
  
  
    /*************** ANZAHL DER ZELLEN ERMITTELN ***************/
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if x == false {
            return lebensmittel.count + 1
        } else {
            return lebensmittel.count
        }
    }
  
    /*************** ZELLEN MIT INHALT FÜLLEN ***************/
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
      
        let cell = tableView.dequeueReusableCellWithIdentifier("LebensmittelCell") as! ModifyCells
      
      
        var LM_ITEM = lebensmittel[indexPath.row]
        if x == false {
            if (indexPath.row == 0) {
                cell.Name.text = "Static Cell"
                return cell
            }
            LM_ITEM = lebensmittel[indexPath.row-1]
        }

        cell.Name.text = LM_ITEM.Name
      
        return cell
    }

und an der Stelle
var LM_ITEM = lebensmittel[indexPath.row]

tritt der Fehler auf
 

ecco55

Tokyo Rose
Registriert
26.10.14
Beiträge
71
Ok ich glaube mein weiss woran es liegt. Mein damaliges Beispiel ist quatsch, weil wir ja, wenn die static cell angezeigt werden soll, eine Cell mehr hinzufügen, aber der array ja diese eine Cell mehr nicht hat.

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

        cell.Name.text = LM_ITEM_NAME
     
        return cell
    }

das könnte funktionieren, bin mir aber nicht sicher
 

SpecialFighter

Fießers Erstling
Registriert
25.04.12
Beiträge
131
mmmh, ist das nicht genau das selbe?
außer das jetzt voher
let LM_ITEM_NAME = LM_ITEM.Name hinzugekomme ist

was für einen Sinn das haben so, verste ich allerdings nicht.

denn man hätte die letzte Zeile noch so schreiben können:
cell.Name.text = LM_ITEM.Name

und sich somit die erste Zeile sparen können.
Und dann siehts meinen Code noch ähnlicher aus oder sehe ich was falsch?
 
Zuletzt bearbeitet:

ecco55

Tokyo Rose
Registriert
26.10.14
Beiträge
71
Stimmt. Haha am Morgen ist man noch nicht klar bei Verstand. Aber sonst Versuch mal einfach am Anfang kein indexPath zu nehmen, sondern das einfach als Array zu initialisieren. Also LM_ITEM als Array initialisieren. So wie du es auch mit var lebensmittel gemacht hast