XTreeTableView 다중 레벨 목록
1. 데이터 처리
우선 데이터에 대한 처리를 말씀드리겠습니다.서버에서 얻은 데이터는 json 데이터로 귀속되고 모든 목록의 등급이 확실하지 않기 때문에 어떤 것은 1층, 양측 데이터만 있고 어떤 것은 다층 데이터이기 때문에 이런 데이터는 우리가 어떻게 모델로 전환해야 하나요?!나의 해결 방법은 그다지 적당하지 않은 단어로'이에는 이'라고 형용하는데, 네가 귀속해서 데이터를 되돌려 주는 이상, 나도 같은 방법으로 데이터를 처리한다.다음은 구체적인 실현 데모를 살펴보겠습니다.
1. 서버에서 가져온 데이터는 대략 다음과 같다.
@{@"list": @[@{@"name": @"first",@"id": @1,
@"subList":@[@{@"name": @"second",@"id": @2},
@{@"name": @"second",@"id": @2}]},
@{@"name": @"first",@"id": @1,
@"subList": @[@{@"name": @"second",@"id": @2,
@"subList": @[@{@"name": @"third",@"id": @3},
@{@"name": @"third",@"id": @3}]},
@{@"name": @"second",@"id": @2,
@"subList": @[@{@"name": @"third",@"id": @3},
@{@"name": @"third",@"id": @3}]}]},
@{@"name": @"first",@"id": @1,
@"subList": @[@{@"name": @"second",@"id": @2},
@{@"name": @"second",@"id": @2}]}]};
2. 그러면 우리는 어떻게 데이터 사전을 모델로 변환해야 합니까? 먼저 모델의 속성과 방법을 정의합니다.
@interface ListModel : NSObject
@property(nonatomic,copy)NSString *name;
//@property(nonatomic,copy)NSString *nameId;
@property(nonatomic,copy)NSNumber *nameId;
@property(nonatomic,copy)NSArray*subList;// ( : )
@property(nonatomic,assign)BOOL isExpand;//
@property(nonatomic,weak)ListModel *superModel;// Model
@property(nonatomic,assign)int level;// , Model
- (instancetype)initWithDict:(NSDictionary *)dict;
+ (instancetype)listModelWithDict:(NSDictionary *)dict;
@end
3. 다음이 중점이다. 다음은 initWithDict 방법을 실현한다. 이 방법에서 우리는 귀속 데이터를 처리하고 데이터를 귀속 모델로 전환할 것이다.
이로써 데이터에 대한 처리는 기본적으로 완성되었고 중점을 잡은 후에 데이터에 대한 처리 사고방식은 여전히 뚜렷하다.
2. tableView 봉인
1. 먼저 XTreeTableView의 개인 정보 초기화 방법을 설명합니다.
/**
XTTreeTableView
@param frame tableView
@param data tableView
@return XTTreeTableView
*/
-(instancetype)initWithFrame:(CGRect)frame withData:(NSArray *)data;
다음은 XTree TableView에서 살펴보겠습니다.m중 방법의 실현.
2. XTreeTableView의 개인 속성을 설명합니다.
@property (nonatomic , strong) NSArray *data;// ( Model)
@property (nonatomic , strong) NSMutableArray *tempData;// ( )
3. XTreeTableView를 만드는 방법은 다음과 같습니다.
- (instancetype)initWithFrame:(CGRect)frame withData:(NSArray *)data
{
self = [super initWithFrame:frame style:UITableViewStyleGrouped];
if (self) {
self.dataSource = self;
self.delegate = self;
_data = data;
_tempData = [NSMutableArray arrayWithArray:data];
}
return self;
}
tableView를 초기화한 후에 우리는 tableView의 데이터 원본 방법을 실현해야 한다.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.tempData.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CELL_ID = @"XTTree";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CELL_ID];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CELL_ID];
}
ListModel *model = self.tempData[indexPath.row];
cell.textLabel.text = model.name;
return cell;
}
4. 다음은 tableView의 에이전트 방법을 실현합니다. 이것은 가장 중요한 것입니다. 앞에서 준비한 것은 모두 이 기능을 위한 것입니다.그가 실현한 사고방식은 우리가 어떤 셀을 클릭할 때 먼저 이 줄에 대응하는 모델을 얻어 이 모델에 있는subList에subModel이 있는지 판단하고 있으면 전개하고 회수하며 전개 속성에 대해 반대값parentModel을 취할 수 있다는 것이다.isExpand=!parentModel.isExpand;없으면 전개, 회수할 수 없다.
만약parentModel.isExpand=YES, 즉 목록을 펼치려면subModel을subList에서 꺼내서 보여야 할 데이터 원본 self에 삽입합니다.tempData의 상응하는 위치를 선택한 다음tableView의 상응하는 위치에cell을 삽입합니다.
if (parentModel.isExpand) {//
for (int i = 0; i < parentModel.subList.count; i ++) {
ListModel *subModel = parentModel.subList[i];
[self.tempData insertObject:subModel atIndex:endPosition];
endPosition ++;
}
expand = YES;
}
만약에'parentModel.isExpand=NO', 목록을 회수합니다. 우리는subList의subModel을 self에서 가져옵니다.tempData에서 삭제하고 원하는 셀을 tableView에서 삭제합니다.
- (NSInteger)removeAllModelsAtSupModel:(ListModel *)supModel
{
NSInteger startPosition = [self.tempData indexOfObject:supModel];
CGFloat count;
for (int i = 0; i < supModel.subList.count; i ++) {
ListModel *model = supModel.subList[i];
count ++;
if (model.isExpand) {
count += model.subList.count;
model.isExpand = NO;
}
}
NSInteger endPosition = startPosition + count + 1;//supModel.subList.count + 1;
[self.tempData removeObjectsInRange:NSMakeRange(startPosition+1, count)];
return endPosition;
}
요약:
처음 쓰는데 공부를 깊이 하기 위해 부족한 점이 있다면 많은 기대 부탁드립니다.Demo:XTTreeTableView
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.