如何使用 UIButton 为单元格设置动画?

Posted

技术标签:

【中文标题】如何使用 UIButton 为单元格设置动画?【英文标题】:How to animate cells with UIButton? 【发布时间】:2015-06-25 18:22:03 【问题描述】:

我想折叠一个部分内的所有单元格。我想通过点击我在部分标题中添加的按钮来做到这一点。显然,带有动画。不只是消失。我有一个想法,如果我可以获取该部分的索引路径,因为我在每个部分中都有恒定数量的单元格,我可以创建一个 switch 语句来为具有适当索引的单元格设置动画。

【问题讨论】:

【参考方案1】:

您可以使用 beginUpdates/endUpdates 块。您将更改到您希望发生动画的 tableView 放入此块中。 (但不要在块内调用[tableView reloadData]。)

例如,您在节标题按钮点击处理程序中编写如下内容:

[self.tableView beginUpdates];
[self.tableView deleteRowsWithIdexPaths:indexPathsToDelete 
                       withRowAnimation:UITableViewRowAnimationTop];
[self.tableView endUpdates];

使用此代码行,索引为 indexPathsToDelete 的行将随着 UITableViewRowAnimationTop 动画消失,但您可以根据需要更改动画类型。

更多信息见WWDC2010 Video“掌握表格视图”,特别是17:40开始的演示。

【讨论】:

我为 indexPath 写了一个整数,但它不允许我这样做。我正在尝试在按钮操作中调用此函数。 indexPathsToDelete 是索引路径数组,所以应该是这样的:@[[NSIndexPath indexPathForRow:0 inSection:0], [NSIndexPath indexPathForRow:1 inSection:0]]【参考方案2】:

1:将动作分配给标题视图(我确定部分点击有委托回调,否则将TapGesture添加到标题视图)

2:如果您使用自动布局,则为 tabvleView 的高度约束设置动画,否则为 tableView 的 frame.height

有什么有效的方法吗?也许 UITableView 内置了取消停靠功能:)

【讨论】:

你能解释一下第二步吗,或者给我一些教程链接什么的?我会很感激的。 我会在那个 ViewController 中添加两个 tableView。 TestHeader 将是一个为表格视图高度设置动画的按钮。【参考方案3】:

我认为为以下 UITableViewDelegate 函数添加用于展开/折叠行的自定义动画可能会起作用...

可选的 func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath)

此外,以下链接为隐藏表格视图单元格/行提供了一个很好的解决方案...

How to display and hide table view cells in swift

祝你好运!

【讨论】:

【参考方案4】:

所以如果你使用 AutoLayout(你应该使用它,因为它很棒),那么 UIView *contentView 的动画将如下所示:

IBOutlet NSLayoutConstraint *contentViewHeightConstraint;

将 Interface Builder 中的这个 Outlet 连接到 contentView 的高度约束。

如果你不知道 contranits 和 autolayout,那么 youtube 和练习 2 周 :)

- (void)moveViewsUp 
    [contentView setNeedsUpdateConstraints];

    int delta = 100;

    [UIView animateWithDuration:ANIM_DURATION
                     animations: ^
        contentViewHeightConstraint.constant = -delta;
        [contentView layoutIfNeeded];
    
        completion: ^(BOOL finished) 
    ];


- (void)moveViewsDown 
    [contentView setNeedsUpdateConstraints];

    [UIView animateWithDuration:ANIM_DURATION
                     animations: ^
        contentViewHeightConstraint.constant = 0;
        [contentView layoutIfNeeded];
    
     completion: ^(BOOL finished) 
    ];

【讨论】:

以上是关于如何使用 UIButton 为单元格设置动画?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中同时为单元格和表格更改设置动画?

如何开始为 tableView 中的每个单元格设置 .gif 动画?

如何使单元格中的 UIButton 在被点击后立即保持特定状态?

如何在布局转换期间为集合视图单元格的边框宽度/颜色设置动画?

如何使 UIButton 仅出现在最后一个单元格中?

如何从模态 UIView 更新自定义单元格中的 UIButton 标题