Список вопросов
Как зайти в Даркнет?!
25th January, 01:11
8
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
898
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
951
0
Очень долго работает Update запрос Oracle
27th January, 09:58
916
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
907
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
941
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1726
0
период по дням
25th October, 10:44
3957
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3722
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4614
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4382
0
Помогите пожалуйста решить задачи
24th November, 23:53
6087
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4352
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4399
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Многоуровневая UITableView?
Просмотров: 394
 
Ответов: 1
Нужно сделать много уровненую таблицу. К примеру в начале у нас есть всего 3 ячейки

Тапая по первой у нас добавятся ячейки второго уровня 
И дальше 3го уровня
Я понимаю, что это делается простым insertRowsAtIndexPaths Но у меня данные берутся из разных массивов. Я так думаю нужно использовать какие то состояния для каждого случая. Но не могу понять как. Может кто то делал что то подобное? Поделитесь сниппетами ;)
Делал подобное.
На входе миссив (NSArray), у каждого элемента есть уровень. Пробегал по массиву и создавал вьювы со сдвигом влево. Потом это все пихал в UITableViewCell.
-(void) flateCommentsData:(NSArray *)_data withLevel:(NSInteger)level
{
NSEnumerator * dataEnum = [_data objectEnumerator];
NSDictionary * commentData;
while (commentData = [dataEnum nextObject])
{
SModelComment * commentModel = [[SModelComment alloc]init];
[commentModel set:@"id" withValue:[commentData objectForKey:@"id"]];
[commentModel set:@"text" withValue:[commentData objectForKey:@"text"]];
[commentModel set:@"userId" withValue:[commentData objectForKey:@"userId"]];
[commentModel setLevel:level];
CGRect cellRect = CGRectMake(commentModel.level*5, 0, 320 - commentModel.level*5, 0);
UIView * cellView = [[UIView alloc] initWithFrame: cellRect];
//add avatar
SModelUser * user = [SModelUserPeer loadObjectById:[commentModel get:@"userId"]];
UIImageView * avatarView = [[UIImageView alloc] initWithImage: user.smallAvatar.image ];
avatarView.frame = CGRectMake(5, 7, 35, 35);
[cellView addSubview:avatarView];
//add username
UILabel * usernameLabel = [[UILabel alloc] initWithFrame:CGRectMake(45, 5, cellRect.size.width - 75, 20)];
usernameLabel.font = [UIFont boldSystemFontOfSize:14.0];
usernameLabel.text = [user get:@"fullName"];
[cellView addSubview:usernameLabel];
//add text
CGRect cellTextRect = CGRectMake(45, 25, cellRect.size.width - 75, 0);
UILabel * cellTextLabel = [[UILabel alloc] initWithFrame:cellTextRect];
cellTextLabel.text = [commentModel get:@"text"];
cellTextLabel.font = [UIFont systemFontOfSize:12.0];
cellTextLabel.numberOfLines = 0;
[cellTextLabel sizeToFit];
cellTextLabel.backgroundColor = [UIColor whiteColor];
[cellView addSubview:cellTextLabel];
CGRect textFrame = cellTextLabel.frame;
textFrame.size.height = textFrame.size.height + 10 + usernameLabel.frame.size.height
;
textFrame.size.height = textFrame.size.height > 50 ? textFrame.size.height : 50;
cellRect.size.height = textFrame.size.height;
cellView.frame = cellRect;
NSMutableDictionary * item = [[NSMutableDictionary alloc] initWithCapacity:2];
[item setObject:cellView forKey:@"view"];
[item setObject:commentModel forKey:@"model"];
[commentsList addObject:item];
if ([commentData objectForKey:@"childs"])
{
[self flateCommentsData:[commentData objectForKey:@"childs"] withLevel:level+1];
}
}
}
потом
-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSDictionary * item = [commentsList objectAtIndex:indexPath.row];
UIView * cellView = [item objectForKey:@"view"];
SModelComment * commentModel = [item objectForKey:@"model"];
NSString * CellIdentifier = [NSString stringWithFormat:@"comment_cell_%d", [commentModel get:@"id"]];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
[cell.contentView addSubview:cellView];
return cell;
}
-(void) flateCommentsData:(NSArray *)_data withLevel:(NSInteger)level
{
NSEnumerator * dataEnum = [_data objectEnumerator];
NSDictionary * commentData;
while (commentData = [dataEnum nextObject])
{
SModelComment * commentModel = [[SModelComment alloc]init];
[commentModel set:@"id" withValue:[commentData objectForKey:@"id"]];
[commentModel set:@"text" withValue:[commentData objectForKey:@"text"]];
[commentModel set:@"userId" withValue:[commentData objectForKey:@"userId"]];
[commentModel setLevel:level];
CGRect cellRect = CGRectMake(commentModel.level*5, 0, 320 - commentModel.level*5, 0);
UIView * cellView = [[UIView alloc] initWithFrame: cellRect];
//add avatar
SModelUser * user = [SModelUserPeer loadObjectById:[commentModel get:@"userId"]];
UIImageView * avatarView = [[UIImageView alloc] initWithImage: user.smallAvatar.image ];
avatarView.frame = CGRectMake(5, 7, 35, 35);
[cellView addSubview:avatarView];
//add username
UILabel * usernameLabel = [[UILabel alloc] initWithFrame:CGRectMake(45, 5, cellRect.size.width - 75, 20)];
usernameLabel.font = [UIFont boldSystemFontOfSize:14.0];
usernameLabel.text = [user get:@"fullName"];
[cellView addSubview:usernameLabel];
//add text
CGRect cellTextRect = CGRectMake(45, 25, cellRect.size.width - 75, 0);
UILabel * cellTextLabel = [[UILabel alloc] initWithFrame:cellTextRect];
cellTextLabel.text = [commentModel get:@"text"];
cellTextLabel.font = [UIFont systemFontOfSize:12.0];
cellTextLabel.numberOfLines = 0;
[cellTextLabel sizeToFit];
cellTextLabel.backgroundColor = [UIColor whiteColor];
[cellView addSubview:cellTextLabel];
CGRect textFrame = cellTextLabel.frame;
textFrame.size.height = textFrame.size.height + 10 + usernameLabel.frame.size.height
;
textFrame.size.height = textFrame.size.height > 50 ? textFrame.size.height : 50;
cellRect.size.height = textFrame.size.height;
cellView.frame = cellRect;
NSMutableDictionary * item = [[NSMutableDictionary alloc] initWithCapacity:2];
[item setObject:cellView forKey:@"view"];
[item setObject:commentModel forKey:@"model"];
[commentsList addObject:item];
if ([commentData objectForKey:@"childs"])
{
[self flateCommentsData:[commentData objectForKey:@"childs"] withLevel:level+1];
}
}
}
-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSDictionary * item = [commentsList objectAtIndex:indexPath.row];
UIView * cellView = [item objectForKey:@"view"];
SModelComment * commentModel = [item objectForKey:@"model"];
NSString * CellIdentifier = [NSString stringWithFormat:@"comment_cell_%d", [commentModel get:@"id"]];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
[cell.contentView addSubview:cellView];
return cell;
}
Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться