我想在点击时展开 tableview 单元格。有一个表格视图,其中两个单元格是可扩展的,而其他的则不是。我需要当我点击可扩展单元格时,它应该在它下面显示单元格,再次点击它应该隐藏。下面有一张图片定义了这一点。
我怎样才能实现这个功能,请指导以上。提前致谢。
我想在点击时展开 tableview 单元格。有一个表格视图,其中两个单元格是可扩展的,而其他的则不是。我需要当我点击可扩展单元格时,它应该在它下面显示单元格,再次点击它应该隐藏。下面有一张图片定义了这一点。
我怎样才能实现这个功能,请指导以上。提前致谢。
这是可扩展 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];
}
}
}
}
如下图所示
好的,我在想的是,标题、事件、开销和朋友将是背景、标题和扩展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
in.h
文件来存储当前部分,并且可以在- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
数据源方法中使用。
我认为你想要的东西已经被苹果给了。您可以查看Apple 在Table View Animations and Gestures标题下提供的示例代码。
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 项目。
那里有一个工作示例,从那里编辑和移动更容易,而不是尝试从零开始写入。