我想扩展UITableView
我必须展示的部分UITableViewCells
。我应该怎么做才能实现这一目标?
问问题
9213 次
2 回答
6
- 一个简单的实现是将部分的单元格高度保持为零。
- 使 viewForSectionHeader 可触摸
- 当您触摸它时,为该部分下的单元格设置适当的高度
- 编写段之间切换的逻辑
或者,
- 在触摸节标题时,重新加载表格,其中包含已触摸节的更新行数。
许多其他方法可以做到这一点。苹果的例子。
于 2012-04-18T06:51:29.017 回答
0
根据 Vignesh 的回答,我尝试了第二种解决方案。“在触摸部分标题时,重新加载表格,并更新已触摸部分的行数。”
首先,声明一个数组来存储每个section的isExpanded标签。初始,所有的值都是BOOL NO。表示所有的section行都被折叠了。
那么,在
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
方法,通过以下代码实现 sectionHeader 触摸事件: 因为我使用自定义单元格作为部分标题视图。所以这里是“单元格”,您可以使用自己的视图。
cell.tag=section;
UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(sectionTapped:)];
[cell addGestureRecognizer:recognizer];
cell.userInteractionEnabled=YES;
并且,在点击 sectionHeader 时执行一些操作。
- (void)sectionTapped:(UITapGestureRecognizer *)recognizer
{
NSMutableArray *isSectionTouched=[[NSMutableArray alloc]initWithCapacity:_sectionExpandBool.count];
isSectionTouched=[_sectionExpandBool mutableCopy];
if ([[isSectionTouched objectAtIndex:recognizer.view.tag]boolValue]==YES) {
[isSectionTouched replaceObjectAtIndex:recognizer.view.tag withObject:[NSNumber numberWithBool:NO]];
}else if ([[isSectionTouched objectAtIndex:recognizer.view.tag]boolValue]==NO){
[isSectionTouched replaceObjectAtIndex:recognizer.view.tag withObject:[NSNumber numberWithBool:YES]];
}
_sectionExpandBool=isSectionTouched;
[self.tableView reloadData];
}
不要忘记修改 numberOfRowsInSection 方法。row.count 应该根据 _sectionExpandBool 的值而改变,如果 section 的 ExpandBool 是 YES,应该返回你的数据源的正确数量,否则返回 0。
它按我的预期工作。但是,我有点担心内存泄漏什么的,因为每次点击标题,整个表格视图都会重新加载。
我想知道是否有一些解决方案只重新加载特定部分。谢谢。
于 2013-04-28T07:52:18.737 回答