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

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

【问题讨论】:

    标签: ios iphone xcode swift


    【解决方案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) {
          }];
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-22
        • 2015-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多