UITableView SelectAll - альтернатива willDeselectRowAtIndexPath - PullRequest
0 голосов
/ 02 июня 2011

Я создал таблицу множественного выбора, я сделал это с помощью willSelectRowAtIndexPath и willDeselectRowAtIndexPath. Работает нормально. Теперь я хочу программно выбрать ВСЕ или Выбрать Нет. Есть ли способ позвонить

[tableView selectRowAtIndexPath: [NSIndexPath indexPathForRow:i inSection:0] animated:NO scrollPosition:UITableViewScrollPositionNone];

без того, что текущая выбранная строка не выбрана? Я прочитал в документации, этот метод не вызывает делегата willDeselectRowAtIndexPath.

Вот весь код, позволяющий множественный выбор. Теперь проблема в том, что я не могу выбрать программно, не отменив выбор предыдущего.

- (NSIndexPath *)tableView:(UITableView *)aTableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath{

    NSDictionary* friend = [friendsData objectAtIndex:[indexPath row]]; 
    if (![selectedIndexes containsObject:friend]) {
        [selectedIndexes addObject:friend];

    } 
    else {
        [selectedIndexes removeObject:friend];
        [tableView deselectRowAtIndexPath:indexPath animated:NO];
        return nil;
    }
    return indexPath;
}


- (NSIndexPath *)tableView:(UITableView *)tableView willDeselectRowAtIndexPath:(NSIndexPath *)indexPath{
    NSDictionary* friend = [friendsData objectAtIndex:[indexPath row]]; 
    if (![selectedIndexes containsObject:friend]) {
         return indexPath;
     }
    // do not select so we can have multiple select
    return nil;
}

Ответы [ 2 ]

2 голосов
/ 02 июня 2011

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

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

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

Похоже, что вы можете выбрать все, установив selectedIndexes в friendsData, и не выбрав ни одного, очистив содержимое selectedIndexes.

Выбрать все:

[selectedIndexes setArray: friendsData];

Выберите Нет:

[selectedIndexes removeAllObjects];

Тогда вы можете перезагрузить ваш вид таблицы. Если вы хотите, чтобы он был мгновенным, выполните [tableView reloadData], в противном случае вы можете использовать методы перезагрузки с анимацией.

0 голосов
/ 24 декабря 2013

Вот метод для обхода таблицы, он работает хорошо.

Выберите все ячейки в UITableView

for (int i = 0; i < [ptableView numberOfSections]; i++) {
for (int j = 0; j < [ptableView numberOfRowsInSection:i]; j++) {
    NSUInteger ints[2] = {i,j};
    NSIndexPath *indexPath = [NSIndexPath indexPathWithIndexes:ints length:2];
        UITableViewCell *cell = [ptableView cellForRowAtIndexPath:indexPath];
       //Here is your code

  }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...