在 Swift 中为行插入覆盖 withRowAnimation 样式

Posted

技术标签:

【中文标题】在 Swift 中为行插入覆盖 withRowAnimation 样式【英文标题】:Overriding withRowAnimation styles for row insertion in Swift 【发布时间】:2015-09-04 09:00:21 【问题描述】:

我正在使用insertRowAtIndexPath 函数在我的tableview 中插入一系列行。 但是,内置动画样式 (.Fade, .Top, .Bottom e.t.c.) 并不能完全满足我的需求。 我需要创建自己的自定义动画,我知道这可以通过覆盖UITableViewRowAnimation 来完成,但我不确定应该如何处理。

期待您的建议。

欣赏任何见解。

【问题讨论】:

这可能会有所帮助:***.com/questions/11379614/… @johnykumar 谢谢。是的,我见过。问题是 - 它是用 ObjC 编写的,很遗憾,我无法复制解决方案。 好的,让我试试 swift 会尽快回复您。 @johnykumar 成功了吗? 【参考方案1】:

在你的 UITableView 子类中试试这个。

override func insertRowsAtIndexPaths(indexPaths: [NSIndexPath], withRowAnimation animation: UITableViewRowAnimation) 
    super.insertRowsAtIndexPaths(indexPaths, withRowAnimation: UITableViewRowAnimation.None)

    self.endUpdates()
    self.beginUpdates()

    for indexPath:NSIndexPath in indexPaths 

        let cell:UITableViewCell? = (super.cellForRowAtIndexPath(indexPath))

        if cell != nil 
            var frame:CGRect = (cell?.frame)!
            frame.origin.x = (cell?.frame.size.width)!
            cell?.frame = frame
            frame.origin.x = 0

            let animationBlock =  () -> Void in
                cell!.frame = frame;
            

            if UIView.respondsToSelector(Selector("animateWithDuration(duration: , delay: , usingSpringWithDamping dampingRatio: , initialSpringVelocity velocity: , options: , animations: , completion: ")) 
                // UIView.animateWithDuration(0.3, delay: 0.0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.0, options:0.0, animations: animationBlock, completion:nil)
                UIView.animateWithDuration(0.3, delay: 0.0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: animationBlock, completion: nil)
             else 
                UIView.animateWithDuration(0.3, delay: 0.0, options:UIViewAnimationOptions.CurveEaseIn, animations: animationBlock, completion: nil)
            
        
    

【讨论】:

为什么是endUpdates()beginUpdates() @NRitH 它只是我建议遵循的快速转换的链接代码。我只将它转换为 swift。 感谢您付出的巨大努力。虽然,我在实现代码时遇到了问题。我没有UITableView 类,我只是将UITableViewDatasourceUITableViewDelegate 以及UIViewController 用于基本表函数-当我尝试添加UITableView 类或替换当前UIViewController 我崩溃了。 在创建 UITableVIew 的选择子类时创建一个类,然后在 .m 文件中添加此方法,然后转到您的故事板或 xib,然后选择 tableview 并进入 Identity Inspector 并为 tableview 分配您的类。 我已经能够通过一些调整使其工作 - [NSIndexPath] 应该更改为 [AnyObject] 等。在代码中。然而问题是 - 它动画整个块的插入,我正在寻找每个单元格的插入。这可能吗?

以上是关于在 Swift 中为行插入覆盖 withRowAnimation 样式的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 3.1 中为 UIView 子类设置默认外观而不覆盖 initialize()

在 ExtJs 中为行扩展器加载 ajax 数据

如何在android gridview中为行设置不同的列

在树视图 gtkmm 中为行设置标题

如何在 Table Bootstrap Vue 中为行禁用 v-slot

将文本附加到文本区域,但将插入符号位置设置为行尾