Можно ли настроить UITableView для разрешения множественного выбора?

Для iPhone можно настроить UITableView таким образом, чтобы он допускал множественный выбор?

Я попытался переопределить -setSelected:animated: для каждого UITableViewCell, но попытка вымыть требуемое поведение сложна, так как трудно отделить реальные отрисовки от тех, где UITableView считает, что я не выбран из-за выбора другой ячейки!

Надеюсь, кто-то может помочь!

Благодаря,

Ник.

Лучшим способом сделать это будет отметка в выбранной строке.

Это можно сделать, установив атрибут принадлежности для выбранных экземпляров UITableViewCell в UITableViewCelAccessoryCheckmark.

Чтобы отменить выбор строки, верните ее в UITableViewCellAccessoryNone.

Чтобы указать, какие ячейки / строки были выбраны (например, при нажатии кнопки), просто перебирайте ячейки таблицы, которые ищут UITableViewCellAccessoryCheckmark. Или, управляйте некоторыми NSSet или т. Д. В делете делегата таблицы в методах делегирования «did select».

Следующее свойство должно работать нормально, если вы разрабатываете приложение для iOS5.0 +

 self.tableView.allowsMultipleSelection = YES; 

Используйте следующий код, чтобы настроить типы доступа к ячейке:

  - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *thisCell = [tableView cellForRowAtIndexPath:indexPath]; if (thisCell.accessoryType == UITableViewCellAccessoryNone) { thisCell.accessoryType = UITableViewCellAccessoryCheckmark; }else{ thisCell.accessoryType = UITableViewCellAccessoryNone; } } - (UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessoryTypeForRowWithIndexPath:(NSIndexPath *)indexPath { //add your own code to set the cell accesory type. return UITableViewCellAccessoryNone; } 

У Джеффа Ламарче есть учебник о том, как это сделать здесь:

http://iphonedevelopment.blogspot.com/2008/10/table-view-multi-row-edit-mode.html

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

Я backported allowsMultipleSelectionDuringEditing и allowsMultipleSelection от iOS5 до более старых iOS. Вы можете разблокировать его по адресу https://github.com/ud7/UDTableView-allowsMultipleSelection

Это замена, и только вам нужно изменить UITableView на UDTableView (в коде или построителе интерфейса)

Из HIG:

Представления таблицы обеспечивают обратную связь, когда пользователи выбирают элементы списка. В частности, когда элемент может быть выбран, строка, содержащая элемент, выделяется кратко, когда пользователь выбирает ее, чтобы показать, что выбор был получен. Затем происходит немедленное действие: либо открывается новое представление, либо строка отображает галочку, указывающую, что элемент выбран. Строка никогда не выделяется, поскольку в представлениях таблицы не отображается постоянное выбранное состояние.

Вам нужно будет свернуть свой собственный стиль множественного выбора, либо с чем-то вроде Mail, либо с помощью аксессуара checkmark на ваших ячейках.

Ребята для множественного выбора вам просто нужно

 self.tableView.allowsMultipleSelection = YES; 

на viewDidLoad и

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *tableViewCell = [tableView cellForRowAtIndexPath:indexPath]; tableViewCell.accessoryView.hidden = NO; // if you don't use custom image tableViewCell.accessoryType = UITableViewCellAccessoryCheckmark; } - (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *tableViewCell = [tableView cellForRowAtIndexPath:indexPath]; tableViewCell.accessoryView.hidden = YES; // if you don't use custom image tableViewCell.accessoryType = UITableViewCellAccessoryNone; } 

Если вы пытаетесь сделать что-то вроде множественного выбора почты (например, для удаления почты), вам, вероятно, придется самому управлять всем выбором. Выбор нескольких строк не является стандартным для iPhone. Mail решает это, используя галочки, чтобы указать, какие строки были выбраны.

синяя выделенная строка в качестве индикатора того, выбрана ли строка, фактически обескураживается в соответствии со страницей HIG 121. Контрольные метки будут делать трюк.

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ int selectedRow = indexPath.row; cout << "selected Row: " << selectedRow << endl; UITableViewCell *indexPathForCell = [tableView cellForRowAtIndexPath:indexPath]; if (indexPathForCell.accessoryType == UITableViewCellAccessoryNone) { indexPathForCell.accessoryType = UITableViewCellAccessoryCheckmark; } else { indexPathForCell.accessoryType = UITableViewCellAccessoryNone; } } 

затем добавьте свой массив или как хотите сохранить данные, которые были выбраны.

Я искал ту же проблему, и ответ Бхавина Читроды дал мне это, но с некоторым дополнением, чтобы держать галочку, как это было во время прокрутки.

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; if ( [array indexOfObject:indexPath] == NSNotFound ) { [array addObject:indexPath]; cell.accessoryType = UITableViewCellAccessoryCheckmark; } else { [array removeObject:indexPath]; cell.accessoryType = UITableViewCellAccessoryNone; } } 

Дополнение:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath { // Your code here . . . if ( [array indexOfObject:indexPath] == NSNotFound ) { cell.accessoryType = UITableViewCellAccessoryNone; } else { cell.accessoryType = UITableViewCellAccessoryCheckmark; } return cell; } 

Примечание. Это не работает в iOS 4+. Это частная, недокументированная константа. Не используйте его.

Если вы не планируете отправлять свое приложение в App Store, вы можете вызвать многострочный режим редактирования, выполнив следующий метод в вашем делете UITableViewController:

 - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { return 3; // Undocumented constant } 

Протестировано с iOS4.3 – 6.0

 -(void)searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller { if ([controller.searchResultsTableView respondsToSelector:@selector(allowsMultipleSelectionDuringEditing)]) { controller.searchResultsTableView.allowsMultipleSelectionDuringEditing = YES; } else { controller.searchResultsTableView.allowsSelectionDuringEditing = YES; } } - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { return UITableViewCellAccessoryCheckmark; } 
Давайте будем гением компьютера.