是否可以configuration一个UITableView允许多选?
对于iPhone,是否可以configuration一个UITableView,以便允许多选?
我已经尝试覆盖-setSelected:animated:
为每个UITableViewCell,但试图-setSelected:animated:
所需的行为是棘手的,因为它是很难分开真正的select从那里的UITableView认为我已经取消select另一个单元格!
希望有人能帮助!
谢谢,
缺口。
做到这一点的最好方法是每选定一行选中一个复选标记。
您可以通过将所选UITableViewCell实例上的accessoryType设置为UITableViewCelAccessoryCheckmark来实现此目的。
要取消select该行,请将其设置回UITableViewCellAccessoryNone。
要枚举select了哪些单元格/行(例如,单击button时),只需遍历表的单元格以查找UITableViewCellAccessoryCheckmark。 或者,在“did select”委托方法中,在表视图委托中pipe理一些NSSet或类似的东西。
如果您正在为iOS5.0 +开发应用程序,以下属性应该可以正常工作
self.tableView.allowsMultipleSelection = YES;
使用下面的代码来设置单元格附件types:
- (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; }
Jeff Lamarche有一个关于如何在这里完成的教程:
http://iphonedevelopment.blogspot.com/2008/10/table-view-multi-row-edit-mode.html
我还没有尝试过这个代码,但是它已经在我脑海中一阵子了,知道一天会在我需要的时候到来。
我backported allowsMultipleSelectionDuringEditing
并allowsMultipleSelection
从allowsMultipleSelection
到较旧的iOS。 你可以在https://github.com/ud7/UDTableView-allowsMultipleSelection分叉;
它是在replace的下降,只有你需要做的是将UITableView更改为UDTableView(在代码或界面生成器)
从HIG:
当用户select列表项目时,表格视图提供反馈。 具体来说,当一个项目可以被select时,包含该项目的行在用户select时会短暂地突出显示select已被接收。 然后,立即采取措施:显示一个新的视图,或者该行显示一个复选标记,表明该项目已被选中。 该行永远不会突出显示,因为表视图不显示持久性选定状态。
你需要推出你自己的多种select风格,或者像Mail一样,或者在你的单元格上使用复选标记附件。
你只需要多重select的人
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; }
如果您正在尝试执行诸如Mail的多重select(例如删除邮件),那么您可能将不得不自己pipe理所有的select。 多行select不是iPhone上的标准。 邮件解决此问题通过使用复选标记来指示哪些行已被选中。
蓝色突出显示的行作为是否select行的指示符实际上是根据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; } }
然后添加您的arrays,或者您希望如何存储所选数据。
我正在寻找同样的问题,Bhavin Chitroda的答案为我提供了这个问题,但除了保留滚动时的复选标记外,还有一些补充。
- (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+中不起作用。 这是一个私人的,没有logging的常数。 不要使用它。
如果您不打算将应用程序提交到App Store,则可以通过在UITableViewController委托中实现以下方法来调用多行编辑模式:
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { return 3; // Undocumented constant }
testingiOS4.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; }