Скрыть или удалить раздел из uitableview - PullRequest
6 голосов
/ 27 июня 2011

Я реализую сгруппированное табличное представление в моем приложении, где пользователь может выбрать строку из другого раздела таблицы.

Я хочу скрыть (удалить) определенный раздел (включая заголовок) в зависимости от выбора строки первого раздела.

т.е.

Заголовок первого раздела - «У вас есть машина?», Ответ будет «ДА» или «НЕТ» в выборе строки. если пользователь выбирает НЕТ, второй и третий раздел из сгруппированной таблицы должны скрыться (удалить).

для выбора радио в сгруппированной таблице, я реализую this

Я также отсылаю к этому , но не полностью заполняю то, что мне нужно.

Пожалуйста, помогите.

Редактировать

TableViewDelegates

myArray - это мой источник данных. myArrayAnswerCount содержит количество строк в разделе

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return [myArray count];
}

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    for (int i = 0; i<[myArray count]; i++) {
        if (section==i) {
            return [[myArray objectAtIndex:i] title];
        }
    }
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    for (int i = 0; i<[myArray count]; i++) {
        if (section==i) {
            return [[myArrayAnswerCount objectAtIndex:i] intValue];
        }
    }
}

это код для того, как я удаляю раздел из таблицы, myIndexPath - это переменная NSIndexPath, которая указывает на выбранный в данный момент раздел.

[table beginUpdates];
[myArray removeObjectAtIndex:myIndexPath.section];
[table deleteSections:[NSIndexSet indexSetWithIndex:myIndexPath.section] withRowAnimation:YES];
[table endUpdates];

Ответы [ 4 ]

9 голосов
/ 28 июня 2011

Я решил свой вопрос.

[table beginUpdates];
[myArray removeObjectAtIndex:myIndexPath.section];
[table deleteSections:[NSIndexSet indexSetWithIndex:myIndexPath.section] withRowAnimation:UITableViewRowAnimationRight];
[table endUpdates];

Проблема в «недопустимом количестве строк в разделе 0. Количество строк, содержащихся в существующем разделе после обновления (2), должно быть равно числустрок, содержащихся в этом разделе до обновления (3) "ошибка была я забыл удалить объект из массива myArrayAnswerCount тоже.

так, наконец, следующий код

[table beginUpdates];
[myArray removeObjectAtIndex:myIndexPath.section];
[myArrayAnswerCount removeObjectAtIndex:myIndexPath.section]; //this is what i forgot.
[table deleteSections:[NSIndexSet indexSetWithIndex:myIndexPath.section] withRowAnimation:UITableViewRowAnimationRight];
[table endUpdates];

спасибо.

1 голос
/ 27 июня 2011

Вы смотрели на это демо , предоставленное APPLE.

Надеюсь, это поможет.

0 голосов
/ 29 апреля 2015

Если вы не пытаетесь удалить раздел или строку, а просто скрыть их.Вы можете использовать:

[tableView beginUpdates];
[tableView reloadSections:[NSindexSet indexSetWithIndex:(indexOfSection)] withRowAnimation:(UITableViewRowAnimationOfChoice)]; //hide section

ИЛИ

[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:(UITableViewRowAnimationOfChoice)]; //hide rows
[tableView endUpdates];

Если вы читаете документацию, это говорит о том, что они ведут себя подобно методам удаления / вставки, однако на самом деле они не удаляются, поэтомунет необходимости удалять / вставлять.Вы можете вызвать этот метод двумя скрыть или показать.

0 голосов
/ 27 июня 2011

Вы можете отметить свои UITableViewDataSource как:

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)aTableView{
             if(YOUR_INSTANCE_BOOL_VAR==NO){
                   return 1;
             }else{
                   return 3;
             }
 }

После того, как пользователь выберет NO, поверните YOUR_INSTANCE_BOOL_VAR в NO, затем вызовите [tableView reloadData];Очевидно, что вам также нужно манипулировать numberOfRowsInSection, чтобы вызвать, сколько строк вы хотите после того, как пользователь выберет NO.

Другой способ - вызвать: - (void)deleteSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation;

Вы можете получить строки indexPaths с помощью:

+ (NSIndexPath *)indexPathForRow:(NSUInteger)row inSection:(NSUInteger)section; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...