在我的应用程序中,我需要删除表格中的多行,编辑表格并在表格旁边显示一个复选框。选中后,表格单元格将被删除。它就像iPhone消息应用程序。我怎么能这样做,请帮助我。
答案 0 :(得分:18)
如果我理解你的问题,你基本上想以某种方式标记 UITableViewCell
(复选标记);然后,当用户点击主“删除”按钮时,所有标记的 UITableViewCell
都将从UITableView
中删除,并与相应的数据源对象一起删除。
要实施复选标记部分,您可以考虑在UITableViewCellAccessoryCheckmark
和UITableViewCellAccessoryNone
UITableViewCell
属性之间切换accessory
和UITableViewController
。处理以下- (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