2016-07-19 15 views
1

Meine JSON-Daten sind ein Array von Objekten, in denen ein inneres Array von Objekten bis zu 3 Ebenen vorhanden ist. Ich nahm JSON-Daten der ersten Ebene in Abschnitten und Daten der zweiten Ebene in Zelle. Wie kann ich jetzt die dritte Datenebene in einer einzigen Tabellenansicht anzeigen?Wie 3 Datenebene in einer einzigen Tabellenansicht in swift angezeigt werden?

können Sie den Screenshot

enter image description here

Bis jetzt nur zwei Ebenen hier hier sehen. Ich brauche das dritte Label wie diese angezeigt werden zusammen mit 2. Ebene ..

enter image description here

meine Json Daten ..

[ 
{ 
"id": "244", 
"name": "PIZZAS", 
"image": "", 
"coupon": "1", 
"icon": "", 
"order": "1", 
"aname": "", 
"options": "2", 
"subcategory": [ 
    { 
    "id": "515", 
    "name": "MARGARITA", 
    "description": "Cheese and Tomato", 
    "image": "", 
    "icon": "", 
    "coupon": "1", 
    "order": "1", 
    "aname": "", 
    "options": "2", 
    "item": [ 
     { 
     "id": "1749", 
     "name": "9 Inch Thin & Crispy Margarita", 
     "description": "", 
     "price": "3.40", 
     "coupon": "1", 
     "image": "", 
     "options": "2", 
     "order": "1", 
     "addon": "495", 
     "aname": "", 
     "icon": "" 
     }, 
+0

Sie könnten eine Unterklasse 'UITableViewCell' erstellen und ihr automatisch Ansichten hinzufügen (eine Ansicht pro Stil von Margarita-Pizza), indem Sie sie vertikal verteilen und Autolayout verwenden. Vorausgesetzt, dass Ihre Tabellenansicht auf dynamische Höhen eingestellt ist, wird die Zelle in der Liste der Ansichten vertikal erweitert, um das gewünschte Ergebnis zu erzielen. – paulvs

Antwort

0

Sie UITableViewDelegate s Methode verwenden könnte tableView(_:indentationLevelForRowAt:) Ihre 3. Ebene einrücken. Implementieren Sie diese Methode einfach in Ihrem Delegaten und geben Sie z. 20 für die Zeilen, die Ihre 3. Ebene darstellen, 0 für alle anderen Zeilen.

UPDATE: Jetzt denke ich, um Ihr Problem zu verstehen. Sie müssen Ihre Hierarchie reduzieren, da Tabellenansichten nur 2 Ebenen nativ unterstützen. Die 1. Ebene kann, wie Sie es bereits tun, über Tabellenansichten implementiert werden. Die 2. und 3. Ebenen können dann als Zeilen implementiert werden, so müssen Sie diese Ebenen in einem Einsturz:

Pizzas     Pizzas 
    Margaritha    Margaritha 
    9InchThin    9InchThin 
    12InchThin -->  12InchThin 
    BBQBasic    BBQBasic 
    9InchThin    9InchThin 
    12InchThin   12InchThin 

Im Hinblick auf die Swift Implementierung, würde ich eine Enum zu verwenden, für die die abgeflachte Reihen vorschlagen:

enum ListItem { 
    case TitleItem(TitleData) // represents 2nd-level items 
    case DetailItem(DetailData) // represents 3rd-level items 
} 

(TitleData ist Ihr Modell Objekt containig zB "Margharita"/"Käse und Tomaten", DetailData ist das Modell zB "9 Zoll Thin & Crispy Margharita"/"£ 3,40" enthalten.)

In viewDidLoad: Erstellen Sie ein Array von ListItem für jeden Abschnitt in Ihrer Tabelle: Fügen Sie für jeden Titel ein TitleItem hinzu, gefolgt von DetailItem s für alle verschachtelten Details. Geben Sie unter tableView:numberOfRowsInSection: die Anzahl der Listenelemente in diesem Abschnitt ein. Und schließlich in tableView:cellForRowAtIndexPath: Rückkehr eine Zelle in Abhängigkeit von der Art des Listenpunktes:

let listItem = listItemForIndexPath(indexPath) 
switch listItem { 
case .TitleItem(let titleData): return titleCellWithData(titleData) 
case .DetailData(let detailData): return detailCellWithData(detailData) 
} 

... wo titleCellWithData und detailCellWithData sollen natürlich wieder verwendbare Zellen aus der Tabellenansicht aus der Warteschlange entfernt.

+0

es nur etwas Platz von vorne in jeder Zeile hinzufügen, die ich als Rückkehr definiert –

+0

Ja, das ist, was es tun soll .. Entschuldigung, wenn das für Sie nicht funktioniert, habe ich wahrscheinlich nicht vollständig verstanden, Ihre Anforderungen. –

+0

sehen Sie bitte die obigen Screenshots. Ich muss die dritten Daten wie 9 Zoll, 12 Zoll ... hinzufügen. Wo sollte ich diese nehmen. bcoz Ich habe bereits den Abschnitt und die Anzahl von Reihen im Schnitt genommen. –