想要扩展和折叠UITableview部分

时间:2012-04-18 06:45:32

标签: ios uitableview

我想展开UITableView部分,我必须展示UITableViewCells。我该怎么做才能做到这一点?

2 个答案:

答案 0 :(得分:6)

  • 一个简单的实现方法是将您的单元格高度保持为零 部分。
  • 使viewForSectionHeader可触摸
  • 当您触摸它时,请为
  • 部分下的单元格设置适当的高度
  • 编写用于在各部分之间切换的逻辑

OR,

  • 在触摸部分标题时,重新加载具有已触摸部分的更新行数的表。

许多其他方法。 Apple example

答案 1 :(得分:0)

根据Vignesh的回答,我已经尝试了第二个解决方案。“在触摸部分标题时,重新加载表格,其中包含更新的行数。”

首先,声明一个数组来存储每个section的isExpanded标记。初始化,所有值都是BOOL NO.Means所有部分行都被折叠。

然后,在

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

方法,通过以下代码实现sectionHeader touch事件: 因为我使用自定义单元格作为节标题视图。所以这里是“单元格”,您可以使用自己的视图。

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的值更改,如果部分的ExpandBool为YES,则应返回正确的数据源数,否则返回0.

这符合我的期望。但是,我有点担心内存泄漏或其他什么,因为每次点击标题,整个表视图将重新加载。

我想知道是否有一些解决方案只能重新加载特定部分。感谢。