Как выбрать несколько строк из нескольких разделов UITableView? - PullRequest
0 голосов
/ 04 июня 2018

Я должен реализовать множественный выбор строки из другого раздела.Так вот мой код

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
 EmailSelectionCell*cell;
cell = (EmailSelectionCell *)[tableView dequeueReusableCellWithIdentifier:@"EmailSelectionCell"];
if(cell == nil) {
    [[NSBundle mainBundle] loadNibNamed:@"EmailSelectionCell" owner:self options:nil];
    cell = EmailSelectionCell;
}

NSArray *insuranceEmailArray = [[data objectAtIndex:indexPath.section] objectForKey:@"email"];


   [((EmailSelectionCell *) cell).lbl_name setText:[insuranceEmailArray objectAtIndex:indexPath.row]];

return cell;
}

В ячейке табличного представления

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{

[super setSelected:selected animated:animated];

if(selected){
    imgv_selectionBox.image = [UIImage imageNamed:@"tick_selected"];
}else{
    imgv_selectionBox.image = [UIImage imageNamed:@"tick_unselected"];
}

}

Моя проблема в том, что setSelected вызывает дважды, когда я отлаживаю, и еще одна проблема заключается в том, что он ведет себя как одиночный выбор.Я думаю, что проблема связана с разделом, но я не знаю, как справиться с этим.Поэтому, пожалуйста, помогите решить эту проблему.

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Метод setSelected будет вызываться дважды, потому что один вызов отменяет выбор предыдущего выбора, а второй - для текущего выбранного.На самом деле вы не должны управлять множественным выбором в этом методе.Вы можете управлять этим в didSelectRowAtIndexpath: метод.Сделайте ваши изменения в методе didSelectRowAtIndexpath.И добавьте выбранные indexPaths в массив.Таким образом, если вы прокручиваете представление таблицы, вы можете управлять выбором.

   func tableView(_ tableView: UITableView, cellForRowAt indexPath:IndexPath) -> UITableViewCell {

      =======
      cell initialisation
      =======

      if indexPathsArray.contains(indexPath) {
         imgv_selectionBox.image = [UIImage imageNamed:@"tick_selected"];
      }else{
         imgv_selectionBox.image = [UIImage imageNamed:@"tick_unselected"];
      }
     }

     func tableView(_ tableView: UITableView, didSelectRowAt indexPath:  IndexPath)
     {
        if indexPathsArray.contains(indexPath) {
         ===remove index path here from array====
          imgv_selectionBox.image = [UIImage imageNamed:@"tick_selected"];
        }else{
         ====add index path to array
          imgv_selectionBox.image = [UIImage imageNamed:@"tick_unselected"];
        }
     }
0 голосов
/ 04 июня 2018

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

. Имеется настройка для эксклюзивного выбора строки или возможности выбора нескольких строк с помощью allowsMultipleSelection.Поэтому убедитесь, что для этого параметра установлено значение YES.

Ваш переопределенный метод все еще кажется корректным, но я не уверен, должен ли он работать так, как вы его реализовали.Как вы говорите, метод вызывается несколько раз.Чтобы ваш случай работал, он также должен вызываться при прокрутке табличного представления.Причина этого заключается в том, что ваши ячейки удаляются из очереди (именно так работает табличное представление), что означает, что одна и та же ячейка будет использоваться для нескольких строк;при прокрутке вниз ячейка, которая исчезнет сверху, на самом деле будет отображаться снизу как повторно использованная.Будет вызван ваш cellForRowAtIndexPath, поэтому вам может понадобиться сменить иконку там.

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