我正试图想出一个从表格视图中删除部分的好方法(在编码和外观方面)。理想情况下,我想创建一种删除类似于删除UITableViewCell
的过程的部分的方法(即按下时显示红色删除按钮的红色减号按钮)。
这个问题是否有任何预先存在的解决方案?我曾尝试对这些进行一些研究,但我真的找不到任何有用的东西。如果没有预先存在的解决方案,我认为我可以尝试实施一个。我的计划是为每个部分创建一个自定义标题。在自定义标题中,我添加删除按钮,其反应方式与删除行时相同。人们认为这会起作用吗?
所以要明确一点,我在问是否有一个现有的解决方案来删除UITableView
中的部分。如果没有,那么我想知道人们是否认为我的想法是可行的,或者是否有任何我忽略的问题。
提前致谢。
答案 0 :(得分: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];
}
答案 1 :(得分:5)
是的,现有方法可用于删除tableview中的部分。您可以使用以下方法:
[m_TableView beginUpdates];
[m_TableView deleteSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationTop];
[m_TableView endUpdates];
但是当您删除必须修改的部分时,您必须记住一件事:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
因为现在你的节号减少了1。
答案 2 :(得分:1)
如果我是正确的,Apple仅在UITableView编辑模式下提供行删除。
我可以想到添加按钮以删除特定部分的3种方法。
首先,在UITableView
的一部分旁边放一个按钮,它不在UITableView
内(我不认为你可以在{{ 1}},或者你可以,但我不知道该怎么做)。您可以检查UITableView
是否处于可编辑模式,并相应地显示或隐藏您的按钮。
Seond,如果你想要UITableView
中的删除按钮,你可以创建一个cuntom UITableViewCell并将删除按钮放在单元格内。这样你每个UITableView
都会有一个按钮,这不是那么好。
第三种选择不提供任何按钮,只需让用户以Apple默认方式删除单元格。你所做的只是跟踪数组中剩下的用于填充该部分的对象数量。如果计数达到0,则删除该部分。
以下是我之前做过类似事情的事情:
我有一个UITableViewCell
firstLevelArray,里面包含几个NSMutableArray
secondLevelArray,每个都包含一些对象。因此,每个secondLevelArray将为section提供数据,而secondLevelArray中的对象将为每个cell提供数据。在NSMutableArray
,- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
,我想删除某个部分,在return [firstLevelArray count];
之后,我[firstLevelArray removeObjectAtIndex:someIndex]
希望这有帮助