2013-03-21 8 views
1

У меня есть метод selectAll, чтобы выбрать все мои ячейки в моем UITableView. Этот метод установите флажок (UIButton). Это очень хорошо работает только для ячеек "visible", но не для ячеек "invisible"!Выделить все ячейки в UITableView даже невидимой ячейке в iOS

Вот мой метод:

- (IBAction)selectAll:(id)sender { 

    for (NSInteger s = 0; s < self.tableView.numberOfSections; s++) { 
     for (NSInteger r = 0; r < [self.tableView numberOfRowsInSection:s]; r++) { 

      CustomCell *cell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:r inSection:s]]; 

      if(!cell.checkbox.selected){ 
       cell.checkbox.selected = !cell.checkbox.selected; 
       cell.account.checked = cell.checkbox.selected; 
      } 

     } 
    } 
} 
+0

Вы не должны ничего делать с ячейками, которые не находятся на экране. ** Измените модель **, и эти ячейки покажут изменение после прокрутки на экране. –

ответ

4

Из документации:

cellForRowAtIndexPath: 

Возвращаемое значение:

Объект, представляющий ячейку таблицы или nil if the cell is not visible или indexPath находится вне диапазона.

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

+0

Спасибо вам, что mcuh! ;) – Lapinou

+0

Добро пожаловать! :) –

0

Вам необходимо проверить или снимите ваш «selected» или «checked» состояние ваших клеток в методе «cellForRowAtIndexPath». Основным источником данных является другое место, где вы можете отслеживать, каково должно быть состояние данных, которые вы пытаетесь представить в ячейках.

Простое изменение UITableViewCells с помощью этой функции будет только обновлять ячейки, которые в настоящее время видны в виде таблицы.

0

Проверьте его в cellForRowAtIndexPath. Просто проверьте условие if с подходящим indexPath.section

if (indexPath.section== add the section){ 
cell.accessoryType = UITableViewCellAccessoryCheckmark; 
} 
else{ 
cell.accessoryType = UITableViewCellAccessoryNone; 
}