2016-05-03 15 views
-5

Ich versuche, leere Zeilen aus der Tabelle zu entfernen. Wenn eine Zeile leer ist, z. B. ohne Text, enthält die Zeile keinen Inhalt, sondern ein Leerzeichen. Ich möchte diesen Raum beseitigen?Wie Leerzeichen zwischen Tabellenzeilen in swift entfernen

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! ArrayDetailTableViewCell 

    //configure cell 

switch indexPath.row { 
    case 0: 
     cell.fieldLabel.text = "1." 
     cell.valueLabel.text = array.item1 
    case 1: 
     if array.item2 != "cod" { 
      cell.fieldLabel.text = "2." 
      cell.valueLabel.text = array.item2 
     } else { 
      cell.fieldLabel.text = "" 
      cell.valueLabel.text = "" 
    default: 
     cell.fieldLabel.text = "" 
     cell.valueLabel.text = "" 
    } 

}

see here the print

+1

Ich verstehe nicht, Ihre Frage - können Sie mehr über Ihr Problem erklären? –

+0

Bitte seien Sie genauer in Ihrer Frage, der Code, den Sie es nicht relevant für, was ich denke, Ihre Frage ist und was ist "array.item2" haben Sie in Betracht gezogen, die Verwendung von Indizes z. 'Array [2]'. Versuchen Sie es schließlich: 'tableView.separatorStyle = .None' –

+0

Oh Entschuldigung, ich habe ein paar Dinge verpasst. Sieh dir das an, ich habe den Code aktualisiert und ein Bild von dem Problem gemacht. Wenn der Fall den Fall 1 nicht erfüllt, wird die Tabellenzeile leer gelassen. Ich wollte diese leere Zeile oder etwas ähnliches löschen – Ewerson

Antwort

0

vielleicht stattdessen die Zeile zu entfernen, sollten Sie diese Zeile verhindern, erstellt werden. Verwenden Sie numberOfRowsInSection, um die Elemente in Ihrem Array zu zählen.

aber ich denke, wenn man nur die Zelle ausblenden möchten, können Sie versuchen cell.hidden in Ihrem Code verwenden:

switch indexPath.row { 
case 0: 
    cell.fieldLabel.text = "1." 
    cell.valueLabel.text = array.item1 
case 1: 
    if array.item2 != "cod" { 
     cell.fieldLabel.text = "2." 
     cell.valueLabel.text = array.item2 
    } else { 
     cell.fieldLabel.text = "" 
     cell.valueLabel.text = "" 
     cell.hidden = true 
default: 
    cell.fieldLabel.text = "" 
    cell.valueLabel.text = "" 
} 
} 
+0

ow ja danke @apikurious ... es verschwindet. Aber der Raum geht weiter zwischen Zeile 1 und Zeile 2 – Ewerson

+0

@Ewerson Ich bin mir nicht sicher, was du mit dem Leerzeichen zwischen Zeile 1 und 2 meinst? Ist Ihre Tabelle eine dynamische Tabelle, deren Daten von einem Array oder etwas geladen werden? – apikurious

+0

@apikuriuos Die Tabelle enthält eine Datums-Kerndatenliste. Wenn dort in den Kerndaten, z. B. array.item2! = "Cod", eine Zeile mit dem Inhalt angezeigt wird, wird ansonsten die leere Zeile angezeigt. Das Problem ist, wenn es eine leere Zeile darstellt, ich sogar versteckt (wie Sie vorgeschlagen), ist es diese Größe der Leerzeile, als ob Inhalt noch. der Tisch ist ungeordnet, wie auf dem Bild oben in Schwierigkeiten angebracht. – Ewerson

-2

In Ihrem viewWillLayoutSubview Methode von ViewController, die die tableView Änderung Tableview separatorStyle zu UITableViewSeparatorStyle.None .Dieses enthält, wird den Unterschied machen, die Sie brauchen, denke ich.

0

Um den Speicherplatz zu entfernen, besteht eine Möglichkeit darin, die Höhenrückgabe innerhalb von heightForRowAtIndexPath zu ändern.

Aber in heightForRowAtIndexPath können wir cellForRowAtIndexPath nicht aufrufen, da es dann rekursiv wird und die Anwendung abstürzen würde. Daher müssen wir mithilfe unserer Datenquelle prüfen, welche Elemente eine leere Höhe zurückgeben.

So:

class My_UITableView: UITableView, UITableViewDataSource, UITableViewDelegate, UIScrollViewDelegate { 

    var My_Items: [Int: Strings] = [Int: String](); //this is your data source which contains your items. 

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     if (My_Items.count > indexPath.row){ 
      if let Current_Item = My_Items[indexPath.row] { 
       if (Current_Item == ""){ 
        return 0; //whatever value you wish to check in your data source item, if it matches your condition send a different height. 
       } 
      } 
     } 
     return 50; 
    } 
} 
+0

danke für die Hilfe ... @Ghulam Ali Ich habe versucht, ich habe den folgenden Code: [link] i.stack.imgur.com/ RKmzq.png aber es hat nicht funktioniert, er gab den folgenden Fehler: Thread 1: EXC_BAD_ACCESS (code = 2, Adresse = 0x7fff586eff8) – Ewerson

+0

Dies ist, weil CellForRowAtIndexPath rekursiv aufruft heightForRowAtIndexPath. Sie müssen überprüfen, ob der Text aus Ihrer Datenquelle null ist und nicht von cellForRowAtIndexPath –

+0

Wenn Sie noch ein Problem haben, habe ich die Antwort aktualisiert, um es weiter zu klären. –

Verwandte Themen