gpt4 book ai didi

iphone - 同时编辑和删除 UITableView 中的多行

转载 作者:可可西里 更新时间:2023-11-01 03:36:18 24 4
gpt4 key购买 nike

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

最佳答案

如果我对您的问题的理解正确,那么您本质上想要以某种方式标记 UITableViewCell(复选标记);然后,当用户点击主“删除”按钮时,所有标记 UITableViewCell 连同它们对应的数据源对象一起从 UITableView 中删除.

要实现 checkmark 部分,您可以考虑在 UITableViewCellAccessoryCheckmarkUITableViewCellAccessoryNone 之间切换 UITableViewCell 附件 属性。在以下 UITableViewController 委托(delegate)方法中处理触摸:

- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

UITableViewCell *c = [tableView cellForRowAtIndexPath:indexPath];
if (c.accessoryType == UITableViewCellAccessoryCheckmark) {
[c setAccessoryType:UITableViewCellAccessoryNone];
}
//else do the opposite

}

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

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

无论哪种情况,最终都必须在按下主“删除”按钮时调用一个方法。该方法只需要循环遍历 UITableView 中的 UITableViewCells 并确定标记了哪些。如果标记,请将其删除。假设只有一个部分:

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];

假设“编辑”是指“删除单个 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.
}

关于iphone - 同时编辑和删除 UITableView 中的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6227168/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com