展开UITableViewstylePlain中的UITableView单元格
我想扩大桌面单元的点击。 有一个tableview,其中两个单元格是可扩展的,其他单元格不是。 我需要当我点击可扩展的单元格时,它应该显示它下面的单元格,再次点击它应该隐藏。 下面有一个图像定义这个。
我怎样才能实现这个function,请指导以上。 提前致谢。
这里是可扩展的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]; } } } }
如下图所示
这个和这个解决scheme也帮助你理解如何pipe理Expandable TableView
好吧,我在想的是,标题, 事件 , 开销和朋友将是UIImageView
为背景的自定义UIView
, 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
您可能需要一些良好的逻辑来设置所有行进行扩展
你的扩展button的行动就像,
- (void) expandSection:(UIButton *)sender;
您可以确定使用sender.tag展开哪一部分,所以不要忘记正确添加标签。 您可能需要在.h
文件中存放当前段的int
,并且可以在- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
数据源方法。
我想你想要的是苹果已经给的。 你可以看看苹果提供的示例代码下的表视图animation和手势的标题。
我已经给出了下面的示例源代码。 您可以根据您的要求自定义此示例。
源代码链接: 点击这里
输出屏幕:
JKExpandTableView是MIT许可的iOS库,实现了可扩展的表格视图 。 一定要检查包含的示例项目。
这是由代表可能的
- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath { //write code here }
被接受的答案是正确的,但链接已经过时。 为了让这个例子起作用,你必须做更多的事情:
从这里下载ExpandableTableCells项目:
https://github.com/cocoanetics/Examples
从这里下载DTCustomColoredAccessory.h和.m文件: https : //github.com/Cocoanetics/DTFoundation/tree/develop/Core/Source/iOS
将DTCustomColoredAccessory文件放在ExpandableTableCells项目中。
在这里你有一个工作的例子,编辑和从那里移动,而不是试图从零写入更容易。