显示数据的可扩展 UITableView 单元格

Posted

技术标签:

【中文标题】显示数据的可扩展 UITableView 单元格【英文标题】:Expandable UITableView cells showing datas 【发布时间】:2016-08-17 23:50:39 【问题描述】:

我有一些按年份分类的体育比赛,每场比赛我都有最终结果、比赛日期和得分手。

我在“表格视图”中显示这些匹配项,如下所示:

所以我想要实现的是:点击一个单元格时,显示匹配的详细信息,如图所示。

我还找到了一些库来实现手风琴/可扩展风格,但没有人能胜任。他们只是扩展单元格并显示另一个单元格。

【问题讨论】:

解决问题的其他方法***.com/questions/29678471/… 非常有帮助!谢谢@DogCoffee! Drop-Down List in UITableView in ios的可能重复 【参考方案1】:

在这种情况下,您甚至不需要使用可扩展/手风琴。这是您可以解决的方法。让我们说正常时的单元格大小为 40,特定点击时为 100。在 heightForRowAtIndexPath 中,您可以检查选择了哪个单元格并返回更多高度

if(selectedRow == indexPath.row) 
    return 100;
 else 
    return 40;

那么你可以做的是在 didSelectRowAtIndexPath 或 clickEvent 方法中

[self.tableView beginUpdates];
[[self tableView] reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForItem: selectedRow inSection:0]] withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tableView endUpdates];

因此,您的单元格将全部呈现,但根据您隐藏或显示内容的高度。

使用输入源更新答案

ViewController.m

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
if(selectedIndex == indexPath.row)
    return 100;
else
    return 40;


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    customCell *cell = (UITableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"Cell"];
    NSDictionary *matches = self.dataArray[indexPath.row];
    cell.matchName.text = [matches objectForKey@"MatchName"];
    if() 
        cell.heightConstraintSecondView.constant = 0;
     else 
        cell.heightConstraintSecondView.constant = 59;
        cell.team1.text = [matches objectForKey@"Team1"];
        cell.team2.text = [matches objectForKey@"Team2"];
        cell.score.text = [matches objectForKey@"Score"];
     
    return cell;


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    selectedIndex = indexPath.row;
    [self.tableView beginUpdates];
    [[self tableView] reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    [self.tableView endUpdates];
    

【讨论】:

不错!那么我应该在哪里添加匹配信息? (如team1[selected_cell], team2[selected_cell] 等?在beginupdatesendUpdates 之间? 您只需要重新加载所选单元格并在 heightforRow 中更改其高度...您是动态创建单元格吗?您需要创建包含所有元素的单元格,只需在选择取消选择时更改其高度以显示或隐藏匹配详细信息。 我将所有的比赛细节保存在数组中,所以基本上所有的单元格都是一样的。当我选择cell1时,它将显示该单元格(匹配)的详细信息,当我选择cell2时,它将显示match2详细信息,依此类推... 我应该使用界面生成器执行此操作吗?创建一些文本字段并从数组中检索内容? 只需查看github.com/quantumarun/Demos/tree/master/ExpandTableCellDemo 的示例演示。这只是一个基本概念,您必须根据需要对其进行更改。【参考方案2】:

您可以为此使用 HVtableview,试试这个链接 https://github.com/xerxes235/HVTableView

【讨论】:

【参考方案3】:

更简洁的方法是创建 2 个具有不同标识符的单元格,并在运行时单击该单元格时更改它。检查这个问题:Drop-Down List in UITableView in iOS

【讨论】:

【参考方案4】:

尝试以下方法之一:

obj-C:KMAccordionTableViewController 斯威夫特:AccordionTableViewController

【讨论】:

以上是关于显示数据的可扩展 UITableView 单元格的主要内容,如果未能解决你的问题,请参考以下文章

如何快速制作嵌套的可折叠 uitableview?

可扩展 UiTableView 的自定义单元格

UITableView 重新加载部分时的内容插入更改

UITableView 单元格中的可重用单元格存在问题

UITableView 单元格在首次加载时未显示

iOS - 带有自定义单元格的可点击 UITableView