Проверка и снятие отметки с UITableViewCells одним щелчком UIToolBarButton

Как поставить галочку рядом со всеми ячейками и снять галочку, нажав UIToolBarButton? Возможно ли это?

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


person subodhbahl    schedule 06.11.2011    source источник
comment
Просто чтобы вы знали, я написал IBAction и связал его с кнопкой на панели инструментов. Используя цикл for, я подсчитал количество ячеек в табличном представлении, загруженном на экран, но проблема в том, что я не знаю, как установить indexPath для каждой из них, а затем установить свойство cell.accessorytype на галочку или нет.   -  person subodhbahl    schedule 07.11.2011


Ответы (2)


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

Итак, вам понадобится следующее:

  • способ хранения представления «проверенного состояния» в данных, которые представляют ячейки;

  • способ установить аксессуар для одной ячейки в вашем методе -tableView:cellForRowAtIndexPath: в соответствии со значением «проверенного состояния» для элемента, который представляет рассматриваемая ячейка

Для обычного UITableViewCell вы можете установить аксессуар, сказав что-то вроде:

cell.accessoryType = item.isChecked ? UITableViewAccessoryCheckmark : UITableViewAccessoryNone;
person Caleb    schedule 06.11.2011
comment
Калеб, я понял твою мысль. Ситуация здесь достаточно сложная. Я выполняю проверку и снятие флажка (т. е. аксессуар одним щелчком мыши меняется на отмеченный, и если он уже проверен, он становится непроверенным и наоборот) в методе cellForRowAtIndexPath. Могу ли я написать отдельную функцию, в которой я мог бы перебирать весь мое табличное представление и, не получая проверенное состояние (потому что для меня не имеет значения, проверено оно или нет), просто снимите все из них.. - person subodhbahl; 07.11.2011
comment
Опять же, нет, вы не хотите перебирать таблицу. Вы хотите перебрать данные, представленные в таблице. В большинстве случаев таблица содержит только те ячейки, которые вы можете видеть — ячейки, которые прокручиваются с одного конца, перерабатываются и используются для ячеек, которые собираются прокручиваться с другого конца. Если вы попытаетесь установить некоторое состояние для данной строки, изменив ячейку, это изменение будет забыто, как только ячейка больше не будет видна. Если вы измените свои данные и позволите этому управлять внешним видом ячеек, ваши изменения будут правильно запомнены. - person Caleb; 07.11.2011
comment
Во-первых, я не понимаю, что вы пытаетесь сказать здесь, если вы измените свои данные и... Я почти уверен, что мне не нужно менять свои данные, чтобы сделать простое изменение типа аксессуара, поскольку я нигде не сохраняю эти данные. Во-вторых, я почти уверен, что вы не поняли мой случай. Сэр, я ни в коем случае не пытаюсь быть грубым. Просто я новичок в программировании для iPhone. - person subodhbahl; 07.11.2011
comment
Шаги, которые мне нужно выполнить — псевдокод 1.-(IBAction) reset{ (для всех ячеек в табличном представлении) { установите для типа аксессуара значение «Нет»} 2. -(IBAction)SelectAll{ (для всех ячеек в табличном представлении){ установите тип аксессуара на checkMark } Это все, что я хочу. Если бы вы могли помочь мне с этим, это было бы очень мило с вашей стороны. Спасибо за ваше время :) - person subodhbahl; 07.11.2011
comment
Откуда вы знаете, что поместить в каждую ячейку? Обычно это массив или подобная структура, содержащая элементы, представленные в таблице. Если у вас есть это, вы хотите сохранить проверенное/непроверенное состояние строки. Если ваша таблица содержит только статические ячейки (содержимое ячеек определяется данными, встроенными в код), вам может потребоваться создать массив для хранения проверенного/непроверенного состояния. Если вы все еще застряли, попробуйте опубликовать какой-нибудь код, например ваш -tableView:cellForRowAtIndexPath:. - person Caleb; 07.11.2011
comment
Хорошо, позвольте мне объяснить вам все это - у меня есть веб-сервис WCF REST, который выдает выходные данные JSON. Все данные, загруженные в табличное представление, поступают из этого вывода JSON. Таким образом, в зависимости от параметра, который вы выбрали в предыдущем представлении, в табличном представлении загружается другой MutableArray. Поскольку это первая загрузка (в настоящее время я работаю), поэтому ничего не проверялось. Таким образом, все ячейки имеют вспомогательный тип, равный нулю. Да, я знаю, что мне нужно сохранить проверенное/непроверенное состояние в массиве, полученном из этого JSON, но сейчас я не беспокоюсь об этом. - person subodhbahl; 07.11.2011
comment
Я просто хочу выбрать все строки и отменить выбор всех строк (графический интерфейс) - только в графическом интерфейсе для пользователя. Я не знаю, объясняет ли это вам вещи, но если у вас есть какие-либо вопросы, просто стреляйте! Спасибо. - person subodhbahl; 07.11.2011
comment
Для более ясной идеи мне нужна альтернатива этому - (UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessorTypeForRowWithIndexPath:(NSIndexPath *)indexPath{ return UITableViewCellAccessoryCheckmark; } Единственная разница в том, что я не могу подключить это к своей кнопке на панели инструментов, и это загружает табличное представление с каждой ячейкой, имеющей галочку. на каком-то следующем уровне. - person subodhbahl; 07.11.2011

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

    for(UITableViewCell* cell in tableAlert.tableView.visibleCells){
        cell.accessoryType = UITableViewCellAccessoryChecked;
    }

Вам также необходимо обновить свой набор данных, чтобы при прокрутке ячеек получался правильный аксессуар в cellForRow.

person malhal    schedule 02.02.2013