4

我试图想出一种从表视图中删除部分的好方法(在编码和外观方面)。理想情况下,我想创建一种删除部分的方法,该方法类似于删除 a 的过程UITableViewCell(即,按下时显示红色删除按钮的红色减号按钮)。

这个问题有没有预先存在的解决方案?我已经尝试对这些区域进行一些研究,但我真的找不到任何有用的东西。如果没有预先存在的解决方案,我想我可以尝试实施一个。我的计划是为每个部分创建一个自定义标题。在自定义标题中,我将添加删除按钮,其反应方式与删除行时相同。人们认为这会奏效吗?

所以要明确一点,我在问是否有现有的解决方案来删除UITableView. 如果没有,那么我想知道人们是否认为我的想法可行,或者我是否忽略了任何问题。

提前致谢。

4

3 回答 3

8

实现自己的 headerView 是要走的路。Apple 不提供用于删除部分的内置用户界面。如果你拉下 iOS 设备的通知区域,你就会知道如何让它看起来不错。

实现也不是很复杂。我用过这样的东西:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return 21.0f;
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 21)];
    headerView.backgroundColor = [UIColor lightGrayColor];

    UILabel *headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(8, 0, 250, 21)];
    headerLabel.text = [NSString stringWithFormat:@"Section %d", section];
    headerLabel.font = [UIFont boldSystemFontOfSize:[UIFont systemFontSize]];
    headerLabel.textColor = [UIColor whiteColor];
    headerLabel.backgroundColor = [UIColor lightGrayColor];
    [headerView addSubview:headerLabel];

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.tag = section + 1000;
    button.frame = CGRectMake(300, 2, 17, 17);
    [button setImage:[UIImage imageNamed:@"31-circle-x"] forState:UIControlStateNormal];
    [button addTarget:self action:@selector(deleteButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
    [headerView addSubview:button];
    return headerView;
}

- (IBAction)deleteButtonPressed:(UIButton *)sender {
    NSInteger section = sender.tag - 1000;
    [self.objects removeObjectAtIndex:section];
    [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:section] withRowAnimation:UITableViewRowAnimationAutomatic];

    // reload sections to get the new titles and tags
    NSInteger sectionCount = [self.objects count];
    NSIndexSet *indexes = [NSMutableIndexSet indexSetWithIndexesInRange:NSMakeRange(0, sectionCount)];
    [self.tableView reloadSections:indexes withRowAnimation:UITableViewRowAnimationNone];
}

在此处输入图像描述

于 2012-05-31T15:30:54.213 回答
5

是的,有现有方法可用于删除 tableview 中的部分。您可以使用以下方法:

[m_TableView beginUpdates];
[m_TableView deleteSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationTop];
[m_TableView endUpdates];

但是,当您删除必须修改的部分时,您必须记住一件事:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

因为现在您的节号减少了 1。

于 2012-05-31T13:37:30.337 回答
1

如果我是正确的,Apple 仅在 UITableView 编辑模式下提供行删除。

我可以想到 3 种添加按钮来删除特定部分的方法。

首先,在部分之外放一个按钮UITableView,它不会在里面UITableView(我不认为你可以在里面的部分标题之外放一个按钮UITableView,或者你可以但我不知道怎么做)。您可以检查是否UITableView处于可编辑模式并相应地显示或隐藏您的按钮。

其次,如果你确实想要一个删除按钮UITableView,你可以创建自定义 UITableViewCell 并将部分删除按钮放在单元格内。这样,您将在每个 中都有一个按钮UITableViewCell,这并不是那么好。

第三个选择是不提供任何按钮,只是让用户以 Apple 默认方式删除单元格。您所做的只是继续跟踪数组中用于填充该部分的对象数量。如果计数为 0,则删除该部分。

这是我之前做的类似事情:

我有一个NSMutableArrayfirstLevelArray 包含几个NSMutableArraysecondLevelArray 里面每个都包含一些对象。因此,每个 secondLevelArray 将为一个部分提供数据,而 secondLevelArray 中的一个对象将为每个单元格提供数据。在- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView,我做return [firstLevelArray count];,无论我想删除一个部分,之后[firstLevelArray removeObjectAtIndex:someIndex],我做[myTableView reloadData]

希望这可以帮助

于 2012-05-31T14:34:18.410 回答