如何使用 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 为单元格设置动画?的主要内容,如果未能解决你的问题,请参考以下文章
如何开始为 tableView 中的每个单元格设置 .gif 动画?
如何使单元格中的 UIButton 在被点击后立即保持特定状态?