编辑&同时删除UITableView中的多行

时间:2011-06-03 12:36:48

标签: iphone objective-c ios uitableview ios4

在我的应用程序中,我需要删除表格中的多行,编辑表格并在表格旁边显示一个复选框。选中后,表格单元格将被删除。它就像iPhone消息应用程序。我怎么能这样做,请帮助我。

4 个答案:

答案 0 :(得分:18)

如果我理解你的问题,你基本上想以某种方式标记 UITableViewCell(复选标记);然后,当用户点击主“删除”按钮时,所有标记的 UITableViewCell都将从UITableView中删除,并与相应的数据源对象一起删除。

要实施复选标记部分,您可以考虑在UITableViewCellAccessoryCheckmarkUITableViewCellAccessoryNone UITableViewCell属性之间切换accessoryUITableViewController。处理以下- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *c = [tableView cellForRowAtIndexPath:indexPath]; if (c.accessoryType == UITableViewCellAccessoryCheckmark) { [c setAccessoryType:UITableViewCellAccessoryNone]; } //else do the opposite } 委托方法中的触摸:

UITableViewCell

如果您想要更复杂的复选标记,也可以look at this post关于自定义UITableViewCells

您可以通过两种方式设置主“删除”按钮:

在任何一种情况下,最终必须在按下主“删除”按钮时调用方法。该方法只需循环UITableView中的NSMutableArray *cellIndicesToBeDeleted = [[NSMutableArray alloc] init]; for (int i = 0; i < [tableView numberOfRowsInSection:0]; i++) { NSIndexPath *p = [NSIndexPath indexPathWithIndex:i]; if ([[tableView cellForRowAtIndexPath:p] accessoryType] == UITableViewCellAccessoryCheckmark) { [cellIndicesToBeDeleted addObject:p]; /* perform deletion on data source object here with i as the index for whatever array-like structure you're using to house the data objects behind your UITableViewCells */ } } [tableView deleteRowsAtIndexPaths:cellIndicesToBeDeleted withRowAnimation:UITableViewRowAnimationLeft]; [cellIndicesToBeDeleted release]; 并确定标记了哪些。{1}}。如果已标记,请将其删除。假设只有一个部分:

UITableViewCell

假设“编辑”是指“删除单个UITableViewCell”或“移动单个UITableViewController”,您可以在- (void)viewDidLoad { [super viewDidLoad]; // This line gives you the Edit button that automatically comes with a UITableView // You'll need to make sure you are showing the UINavigationBar for this button to appear // Of course, you could use other buttons/@selectors to handle this too self.navigationItem.rightBarButtonItem = self.editButtonItem; } // Override to support conditional editing of the table view. - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { // Return NO if you do not want the specified item to be editable. return YES; } - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { return YES; } - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { //perform similar delete action as above but for one cell } } - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { //handle movement of UITableViewCells here //UITableView cells don't just swap places; one moves directly to an index, others shift by 1 position. } 中实施以下方法:

{{1}}

答案 1 :(得分:2)

您可以将1个UIButton称为“编辑”并将其连接到IBAction。在IBAction编写中,您将能够按照您的要求进行编写。

 -(IBAction)editTableForDeletingRow
 {
      [yourUITableViewNmae setEditing:editing animated:YES];
 }

这将在左上角添加圆形红色按钮,您可以单击该删除按钮,单击该按钮将删除该行。

您可以实现UITableView的委托方法如下。

 -(UITableViewCellEditingStyle)tableView: (UITableView *)tableView editingStyleForRowAtIndexPath: (NSIndexPath *)indexPath
 { 
      //Do needed stuff here. Like removing values from stored NSMutableArray or UITableView datasource 
 }

希望它有所帮助。

答案 2 :(得分:1)

您希望找到deleteRowsAtIndexPath,并在[yourTable beginUpdates]和{}之间挤压所有代码[yourTable endUpdates];

答案 3 :(得分:1)

我在这里找到了非常好的代码请使用此代码来实现某些功能 Tutorials Link