如何在UITableView – IOS中实现Expandable – 可折叠的UITableViewCell

我采取了UITableview来获取单元格ExpandView 。 我想要这样的东西被实现。

Exapand单元格视图

所以, UITableView将是最好的方法,或build议我任何好的实现方式,也无法让subview根据screenSize进行调整。

可能是有另一种方法来完成这一点,但这是我如何展开UITableViewCell飞。 这可以给出这个想法,你可以实现你的解决scheme。

我在我的数据模型中保持行高:

 - (void)viewDidLoad { [super viewDidLoad]; //Data source datasource = [[NSMutableArray alloc] init]; NSMutableDictionary *aDicti = [[NSMutableDictionary alloc] init]; [aDicti setValue:@"a TEXT" forKey:@"text"]; [aDicti setValue:@(50) forKey:@"cellheight"]; // here } 

当select改变时,只需更新数据源中的相关键。

 -(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView beginUpdates]; [[datasource objectAtIndex:indexPath.row] setObject:@(50) forKey:@"cellheight"]; [tableView endUpdates]; } -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView beginUpdates]; [[datasource objectAtIndex:indexPath.row] setObject:@(200) forKey:@"cellheight"]; [tableView endUpdates]; } 

一次[tableView endUpdates]; 执行heightForRowAtIndexPathnumberOfRowsInSection委托方法,并使用数据源中的值自动调整单元格高度。

 -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return [[[datasource objectAtIndex:indexPath.row] objectForKey:@"cellheight"] intValue]; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return datasource.count; } 

如果你不想在你的数据源中保持行高,你可以基本上应用这个。

 -(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView beginUpdates]; [tableView endUpdates]; } -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView beginUpdates]; [tableView endUpdates]; } -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { if (tableView.indexPathForSelectedRow.row == indexPath.row) { return 100; } return 50; } 

这就是电话, 手风琴 ,这个网站有很好的例子(与演示),这是链接 。

基本上当你使用TableView的时候,你应该使用节号和单元格的数量。 在使用节标题的情况下,您应该将numberOfRowsInSection设置为0(向上滚动)到X当您要展开它。 那个电话之后

 tableView.reloadData 

我在这里用不同高度的animation实现了这个行为:

https://github.com/rudald/expandedTableViewIOSSwift/

有许多关于这个function的开源项目。 我已经下载了几个项目,对于我来说,最可定制和无问题的是SLExpandableTableView

SDNestedTable正是你想要的。

该模块的概念是具有UITableView及其单元的所有默认function,同时为每个单元添加一个子UITableView 。 主SDNestedTableViewController tableview中的每个单元( SDGroupCell )充当其自己的子表的控制器。 表和子表的状态,人口和行为主要由SDNestedTableViewController控制。

如果您正在寻找一个简单易用的可扩展视图库, HVTableView是您的select。 它提供了可接受的性能,足以在常规项目中使用。