Удаление строк из UITableView, который имеет несколько разделов - PullRequest
2 голосов
/ 24 июня 2011

Я разрабатываю приложение для iPad, в котором на одном из экранов имеется встроенное табличное представление с несколькими разделами.Каждый раздел заполняется собственным массивом (array1 и array2).

Я создал кнопку, которая переводит эту таблицу в режим редактирования.Однако мне нужно как-то изменить свой

$tableView:commitEditingStyle:forRowAtIndexPath

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

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
    if(editingStyle == UITableViewCellEditingStyleDelete){     
//This is the line i need to change...
        [array1 removeObjectAtIndex:indexPath.row];
        [myTable deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }
}

Ответы [ 6 ]

4 голосов
/ 24 июня 2011

Похоже, вам нужно удалить строку из правильного массива ... использование оператора switch для секций может сработать (но только при наличии заданного количества секций, которое, как вам кажется, есть)

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

  switch (indexPath.section) {
    case 0
      [array0 removeObjectAtIndex:indexPath.row];
      break;
    case 1
      [array1 removeObjectAtIndex:indexPath.row];
      break;
  }

и т.д.

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

Переменная indexPath имеет свойства строки и раздела.Итак, вы можете сделать:

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{ if(editingStyle == UITableViewCellEditingStyleDelete){

    if (indexPath.section == 1) {
        // do something
    }
}
2 голосов
/ 24 июня 2011

Сделайте так ... Получите необходимый раздел, используя

 NSInteger section = [indexPath section];
 if (section == 0)
     {
       // write your code for deleting rows in your 1st section
      }

 if (section == 1)
     {
       // write your code for deleting rows in your 2nd section
      }

  // This is the idea...
1 голос
/ 28 марта 2012

Попробуйте это:

[[self.mainArrayList objectAtIndex:indexPath.section] removeObjectAtIndex:indexPath.row];
1 голос
/ 24 июня 2011
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

- это метод, который вам нужен, чтобы определить, какую ячейку вы выбрали.

Если вы просто хотите определить фактический отображаемый участок, вы можете сделать это с помощью indexPath.section

  NSInteger section = [indexPath section];
0 голосов
/ 24 июня 2011

Параметр indexPath метода commitEditingStyle: ... имеет раздел и строку ячейки.Возможно, я неправильно понимаю вопрос, можете ли вы уточнить, что вы подразумеваете под «удалить его из связанного массива» - у вас есть один массив для каждого раздела в вашей таблице?

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