2016-07-19 3 views
1

내 json 데이터는 개체 데이터의 내부 배열이 3 단계까지 존재하는 개체 배열입니다. 섹션 및 셀의 2 수준 데이터에서 첫 번째 수준의 json 데이터를 가져 왔습니다. 이제 어떻게하면 세 번째 수준의 데이터를 단일 tableview에 표시 할 수 있습니까 ??신속한 단일 테이블 뷰에 3 레벨의 데이터를 표시하는 방법은 무엇입니까?

당신은 여기 다 이제 두 가지 수준까지 여기

enter image description here

스크린 샷을 볼 수 있습니다. 나는 당신이 당신의 3 수준을 들여 UITableViewDelegate의 방법 tableView(_:indentationLevelForRowAt:)를 사용할 수 있습니다 .. 두번째 수준과 함께이 같은 3 라벨을 표시

enter image description here

내 JSON 데이터 ..

[ 
{ 
"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

Autolayout을 사용하여'UITableViewCell' 서브 클래스를 만들고 프로그램 방식으로보기를 추가 할 수 있습니다. (마가리타 피자 스타일 당 하나의보기) 수직으로 배치합니다. 테이블 뷰가 동적 높이로 설정되어 있으면 뷰 목록이 세로로 확장되어 원하는 결과를 얻습니다. – paulvs

답변

0

이 필요합니다. 대리인에 해당 메소드를 구현하고 예. 제 3 수준을 나타내는 행에 대해서는 20이고 다른 모든 행에 대해서는 0입니다.

업데이트 : 이제 문제를 이해하고 있다고 생각합니다. 테이블 뷰는 기본적으로 2 단계 만 지원하기 때문에 계층 구조를 병합해야합니다. 1 단계는 tableview 섹션을 사용하여 구현할 수 있습니다 (이미 수행 한 것처럼). 2 층과 3 레벨은 다음 행으로 구현, 그래서 당신은 하나에이 수준을 축소 할 수 있습니다 : 신속한 구현의 측면에서

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

, 내가 평평 행을 나타 내기위한 열거를 사용하는 것이 좋을 것 :

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

(TitleData는 모델 객체 containig 예이다 "Margharita"/ "치즈와 토마토", DetailData는/"£ 3,40"예 "9 인치 얇은 & 바삭 Margharita"를 포함하는 모델입니다.)

viewDidLoad: 테이블의 각 섹션에 대해 ListItem의 배열을 만듭니다. 모든 제목에 TitleItem을 추가하고 모든 중첩 된 내용에 대해 DetailItem을 추가합니다. tableView:numberOfRowsInSection:에서 해당 섹션의 목록 항목 수를 반환하십시오. 그리고 마지막으로 tableView:cellForRowAtIndexPath:의 목록 항목의 종류에 따라 셀을 반환 :

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

... 물론 titleCellWithDatadetailCellWithData 테이블보기에서 재사용 가능한 세포를 큐에서 제거해야하는 위치.

+0

그것은 내가 반환으로 정의한 각 행 앞에있는 일부 공간 만 추가합니다. –

+0

예기치 않은 일이 있습니다. 죄송합니다. 문제가 해결되지 않는다면, 귀하의 요구 사항을 완전히 이해하지 못했을 것입니다. –

+0

위의 스크린 샷을 참조하십시오. 9 인치, 12 인치와 같은 세 번째 데이터를 추가해야합니다 ..... 이걸 가져 가야합니까? bcoz 섹션에서 numberof 행을 이미 가져 왔습니다. –

관련 문제