我想在它的点击上展开tableview单元格。有一个tableview,其中两个单元格是可扩展的,而另一些则不是。当我点击可扩展单元格时,它需要显示它下面的单元格,再次点击它应该隐藏。下面有一张图片来定义这个。
如何实现此功能,请指导以上内容。 提前谢谢。
答案 0 :(得分:12)
Here是具有可扩展UITableView的完整教程
这是代码片段。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([self tableView:tableView canCollapseSection:indexPath.section])
{
if (!indexPath.row)
{
// only first row toggles exapand/collapse
[tableView deselectRowAtIndexPath:indexPath animated:YES];
NSInteger section = indexPath.section;
BOOL currentlyExpanded = [expandedSections containsIndex:section];
NSInteger rows;
NSMutableArray *tmpArray = [NSMutableArray array];
if (currentlyExpanded)
{
rows = [self tableView:tableView numberOfRowsInSection:section];
[expandedSections removeIndex:section];
}
else
{
[expandedSections addIndex:section];
rows = [self tableView:tableView numberOfRowsInSection:section];
}
for (int i=1; i<rows; i++)
{
NSIndexPath *tmpIndexPath = [NSIndexPath indexPathForRow:i
inSection:section];
[tmpArray addObject:tmpIndexPath];
}
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if (currentlyExpanded)
{
[tableView deleteRowsAtIndexPaths:tmpArray
withRowAnimation:UITableViewRowAnimationTop];
cell.accessoryView = [DTCustomColoredAccessory accessoryWithColor:[UIColor grayColor] type:DTCustomColoredAccessoryTypeDown];
}
else
{
[tableView insertRowsAtIndexPaths:tmpArray
withRowAnimation:UITableViewRowAnimationTop];
cell.accessoryView = [DTCustomColoredAccessory accessoryWithColor:[UIColor grayColor] type:DTCustomColoredAccessoryTypeUp];
}
}
}
}
如下图所示
答案 1 :(得分:4)
好的,我在想的是,标题,活动,开销和朋友将是自定义UIView
背景为UIImageView
,标题为UILabel
,展开为UIButton
。所以基本上
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
有你的标题的返回计数。
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
每个标题都返回UIView
。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
计算该标题中的行数。 您可能需要为此维护一个数组。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
具有单元格项目的高度
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
最初所有部分应该为0(零),当用户点击展开时,它应该相对于该部分中的行数*单元格高度而增加。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
您可能需要一些良好的逻辑来设置所有扩展行
您的扩展按钮的行为类似于
- (void) expandSection:(UIButton *)sender;
您可以使用sender.tag识别要扩展的部分,因此请不要忘记正确添加标记。您可能需要在int
文件中.h
来存储当前部分,并且可以在- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
数据源方法中使用。
答案 2 :(得分:3)
我认为Apple已经给出了你想要的东西。您可以在表格视图动画和手势的标题下查看Apple提供的Sample Code。
答案 3 :(得分:2)
答案 4 :(得分:2)
JKExpandTableView是MIT许可的iOS库,用于实现expandable table view。一定要检查包含的示例项目。
答案 5 :(得分:0)
委托人可以这样做
- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath {
//write code here
}
答案 6 :(得分:0)
接受的答案是正确的,但链接已过时。为了让这个例子起作用,你必须做更多的事情:
从这里下载ExpandableTableCells项目:
https://github.com/cocoanetics/Examples
从这里下载DTCustomColoredAccessory.h和.m文件: https://github.com/Cocoanetics/DTFoundation/tree/develop/Core/Source/iOS
将DTCustomColoredAccessory文件放入ExpandableTableCells项目中。
你有一个工作的例子,它更容易编辑和从那里移动而不是尝试从零写。