在某个UITableViewCell下添加和删除UITableViewCell

时间:2016-06-14 03:06:45

标签: ios swift uitableview swift2

我正在尝试一个tableview,其中有一个uitableviewcell(cell1)的子类,其中包含一个按钮。当在cell1中单击按钮时,此按钮应该在其下方添加和删除uitableviewcell(cell2)的不同子类。我附上了一个非常糟糕的例子,说明我想要发生什么。enter image description here

我试图做的是点击按钮时我将cell2插入到cell1的数组[indexPath.row + 1]的单元格对象数组中,然后在点击关闭单元格时从数组中删除该对象。在我插入或删除单元格后,我重新加载tableView以更新它以反映数组,但这是它搞砸了,并且不像我认为的那样。下面的代码可以提供更好的图片:

var tableCellObjects: [NSObject] = [] //grab the cell objects from an API call and append the cell2Object when a cell1 is expanded


func moreButtonTapped(sender: UIButton) {

    var indexPath: NSIndexPath!

    if let superview = sender.superview {
        if let cell = superview.superview as? Cell1 {
            indexPath = tableView.indexPathForCell(cell)
        }
    }

    if tableCellObjects[sender.tag].isKindOfClass(Cell1Object) {
        let cell1Object = tableCellObjects[sender.tag] as! Cell1Object

        if cell1Object.expanded {
            cell1Object.expanded = false
            sender.setImage(UIImage(named: "MoreButtonClosed.png"), forState: .Normal)
            tableCellObjects.removeAtIndex(indexPath.row+1)

            tableView.reloadData()
        } else {
            cell1Object.expanded = true
            sender.setImage(UIImage(named: "MoreButtonOpen.png"), forState: .Normal)
            tableCellObjects.insert(Cell2Object(param1, param2: param2), atIndex: indexPath.row+1)
            tableView.reloadData()
        }

    }
}

1 个答案:

答案 0 :(得分:1)

当您的数据发生更改时,您应该更新数据源,然后插入/删除/重新加载索引路径。使用以下功能:

public func insertRowsAtIndexPaths(indexPaths: [NSIndexPath], withRowAnimation animation: UITableViewRowAnimation)
public func deleteRowsAtIndexPaths(indexPaths: [NSIndexPath], withRowAnimation animation: UITableViewRowAnimation)
public func reloadRowsAtIndexPaths(indexPaths: [NSIndexPath], withRowAnimation animation: UITableViewRowAnimation)

我建议您使用.Fade使动画流畅。