展开/最小化UITableView自定义单元格

时间:2015-10-08 07:59:53

标签: ios swift uitableview

在我的应用程序中,我有UITableView自定义XIB单元格,当用户单击单元格应展开并显示内容的任何单元格时,如果再次单击它,则单元格应最小化。
我的问题是,如果之前有任何扩展的单元格,并且用户单击另一个单元格,则应首先最小化第一个单元格,然后此单元格将被扩展。

我正在使用:tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)

但它不起作用。 以前有人遇到这样的问题吗?

我会非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

您可以尝试以下步骤:

  • 定义

    var expandHeight: CGFloat = 100
    var normalHeight: CGFloat  = 50.0
    var currentSelected = 0
    
  • 中使用它们
    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    
            if indexPath.row == currentSelected {
    
                return expandHeight
            }
            else {
    
                return normalHeight
            }
        }
    
  • 中调用它
     override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    
         tableView.beginUpdates()
    
         currentSelected = indexPath.row
    
         tableView.endUpdates()
     }
    

答案 1 :(得分:0)

在didSelectRowAtIndexpath:UITableView上的委托方法中编写以下算法。

1)检查是否已经扩展了任何单元格?(可以通过维护indexPath属性变量进行检查,这有助于再次获取该单元格以使用cellForRowAtIndexpath执行任何操作:)。

2)如果是,则将tableview的单元格高度设置为默认值,例如44.0,否则不执行任何操作。

3)然后在所选单元格上应用展开的单元格函数(扩展单元格的方法),并使用新选择的单元格的indexPath更新indexPath属性。