2

我想扩展UITableView我必须展示的部分UITableViewCells。我应该怎么做才能实现这一目标?

4

2 回答 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 回答