我想实现一种功能,我需要在 uitableview 中折叠和展开一些视图。
我已经经历了一种方法,我可以在其中制作部分,然后单击部分我显示或隐藏该部分的单元格。
我的问题是有一个不应该在连续第一部分上方折叠的视图。我有点困惑,在这种情况下什么应该是正确的解决方案。
场景非常复杂,所以我画了一些草图以保持简单。
请让我知道实现此目的的正确解决方案或示例。
我想实现一种功能,我需要在 uitableview 中折叠和展开一些视图。
我已经经历了一种方法,我可以在其中制作部分,然后单击部分我显示或隐藏该部分的单元格。
我的问题是有一个不应该在连续第一部分上方折叠的视图。我有点困惑,在这种情况下什么应该是正确的解决方案。
场景非常复杂,所以我画了一些草图以保持简单。
请让我知道实现此目的的正确解决方案或示例。
因此,如果我理解正确,您更愿意让 tableViewCells 在某些用户操作后(可能在按下同一单元格中的一个按钮之后)可以扩展部分 tableviewcell ?然后你可以考虑在你的表格视图单元格中使用这样的方法
- (IBAction)action:(id)sender {
[_delegate actionPressed:relevantData];
}
操作连接到相应按钮的位置。然后在您的 tableviewcontroller 中实现该方法
-(void)actionPressed:(id)relevantData
{
//update your datasource, for example retrieve the text you want in your expanded views
[self.tableView reloadData];
}
在方法中
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
//normal things about reusing cells etc.
[cell configureWithData:(id)Data];
return cell;
}
在您的自定义表格单元格中实现 configureWithData。根据要配置单元格的数据(这可能取决于是否按下了某些按钮),您可以设置单元格并扩展某些视图。
确保考虑到这一点
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
//return correct cell height depending on which views in cell were expanded or not
}
或者您可以使用自动布局连接您的单元格并在 viewdidload 中使用类似的东西
self.tableView.estimatedRowHeight=100.0;
self.tableView.rowHeight=UITableViewAutomaticDimension;
您可以按照完成下拉单元格的方式保留它,并使用将放在整个表格视图顶部的表格视图标题视图(不是部分标题)。您可以将 uiview 拖到情节提要中的 tableview 顶部,也可以在 viewDidLoad 中以编程方式:
UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(XXX, YYY, XXX, YYY)];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(XXX, YYY, XXX, YYY)];
[headerView addSubview:imageView];
UILabel *labelView = [[UILabel alloc] initWithFrame:CGRectMake(XXX, YYY, XXX, YYY)];
[headerView addSubview:labelView];
self.tableView.tableHeaderView = headerView;
它看起来像这样(虽然这是一个集合视图,所以单元格显然是全宽的)。有一个全局标题,然后是您的部分标题,然后是您的单元格:
几周前我解决了相同类型的问题,你可以试试这个 -
首先有自定义单元格并使用自动布局,以便单元格可以自行调整大小,即根据内容确定其大小,您可以从此链接http://useyourloaf.com/blog/self-sizing-table-view-获取帮助细胞.html
(如果您要添加代码,添加这些约束会更容易)
基本思想是分别为扩展状态和收缩状态添加约束并将它们存储在数组中。
展开状态 - 如图所示的正常状态。添加所需的约束并将它们存储在数组中,比如constraintsForExpansionOfView
收缩状态 - 在这种状态下,所有视图也会出现,但所有会收缩的视图都将移动到 alpha = 0 的单元格顶部,即收缩视图将被隐藏但会在顶部并且不会干扰确定单元格的大小. 在为签约状态添加这些约束时,使用
constraint.active = false
还将这些约束存储在单独的数组中,例如constraintsForContractionOfView
因此,最初将应用您的constraintsForExpansion,因为我们在添加时没有停用它们。
最后一步-当您希望在动画块下查看具有一定持续时间的收缩时,请编写以下代码-
for constraint in constraintsForContractionOfView {
constraint.active = true
}
for constraint in constraintsForExpansionOfView {
constraint.active = false
}
在动画块下,还将您想要收缩的视图的 alpha 更改为 0,例如
someview.alpha = 0
虽然再次扩展您的视图只是在动画块中执行相反的操作,即现在激活您的constraintsForExpansionOfView并停用constraintsForContractionOfView并将所有隐藏视图的 alpha 更改为 1。