Несколько нажатий на одну и ту же строку в табличном представлении

#objective-c #ios #uitableview

#objective-c #iOS #uitableview

Вопрос:

Я работаю над установкой флажка в каждой строке табличного представления. Когда я нажимаю на строку, ее значение должно сохраняться в массиве, при нажатии на другую строку ее значение также должно сохраняться в том же массиве, а при нажатии на ту же строку значение должно удаляться из массива.

Пожалуйста, подскажите мне, как это реализовать. Я использовал следующий код в didSelectRowAtIndexPath методе, но мне не удалось это сделать.

 if([arrData count]==0)
{
    strlast = [arrName objectAtIndex:indexPath.row];
    [arrData addObject:strlast];
    NSLog(@"string checked in arrData   %@",strlast);
}
else 
{
    for(int i = 0 ;i < [arrData count]; i  ) 
    {
        NSLog(@"[arrData count]:%d",[arrData count]);
        strSelected = [arrName objectAtIndex:indexPath.row];
        NSLog(@"strSelected:%@",strSelected);

        for(int i = 0 ;i < [arrData count]; i  ) 
        {
            if([strSelected caseInsensitiveCompare:[arrData objectAtIndex:i]])
            {
                [arrData addObject:strSelected];
                NSLog(@"arrData:%@",arrData);
            }
        }
    }
}
  

Ответ №1:

list — это имя массива, которое содержит все данные, просматриваемые в tableview, замените его вашим собственным именем массива Предположим, что tableArray — это ваш массив, в который вставляются и удаляются значения. в файле .h

 NSMutableArray *tableArray;
  

в файле .m в представлении didload

 tableArray=[[NSMutableArray alloc]init];
  

tableview не выбрал метод строки:-

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {




if ([tableArray count]>0) {

        if ([tableArray containsObject:[list objectAtIndex:indexPath.row]]) {
            [tableArray removeObject:[list objectAtIndex:indexPath.row]];
            NSLog(@"data removed");
            NSLog(@"tableArray%@",tableArray);
        }
        else {
            [tableArray addObject:[list objectAtIndex:indexPath.row]];
            NSLog(@"data added");
            NSLog(@"tableArray%@",tableArray);
        }

    }
    else {
        //[tableArray addObject:[NSString stringWithFormat:@"%d",indexPath.row]];
        [tableArray addObject:[list objectAtIndex:indexPath.row]];
        NSLog(@"data added");
        NSLog(@"tableArray%@",tableArray);
    }


}
  

освободите массив в dealloc
Я протестировал код, надеюсь, он может вам помочь….

Комментарии:

1. @Jenifer: логика правильная, но она возвращает номер строки, а не элемент в строке. т. Е. у меня есть четыре имени в четырех строках, я хочу выполнить операцию над ними

2. итак, если вы получаете строку no, вы можете найти элемент для этой строки no, это очень просто

3. хорошо, я понимаю, что смотрите отредактированный ответ, в нем будут указаны элементы в строках, а не номер строки.