滑动以删除显示应隐藏在单元格中的标签

时间:2014-10-15 23:03:18

标签: ios xcode uitableview swift

我在尝试将可扩展单元格实现到我的应用程序时遇到了很多问题。目前的问题是,虽然我的代码可以按照扩展和折叠单元格的方式工作,但它会显示刷卡时要隐藏的内容,这些内容看起来很糟糕。

另一个问题是,当我点击导航按钮以远离桌面视图时,其中一个单元格会展开。此外,当敲击一个单元格时,它似乎会松开顶部的分界线,直到敲击不同的单元格。 (这些问题比较轻微。提到的第一个问题更为重要。)

这是我在didSelectRowAtIndexPath中的代码:

var selectedRowIndex: NSIndexPath = NSIndexPath(forRow: -1, inSection: 0)

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    selectedRowIndex = indexPath
    tableView.beginUpdates()
    tableView.endUpdates()
}

这是我在heightForRowAtIndexPath中的代码:

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    cellHeight = 68
    if tableView != self.searchDisplayController?.searchResultsTableView {
        if indexPath.row == selectedRowIndex.row {
            if cellTapped == false {
                cellTapped = true
                cellHeight = 141
                return 141
            } else {
                cellTapped = false
                cellHeight = 68
                return 68
            }
        }
    }
    return 68
}

在cellForRowAtIndexPath中:

if cellHeight == 141 {
    cell.notesLabel.hidden = false
    println("False")
} else if cellHeight == 68 {
    cell.notesLabel.hidden = true
    println("True")
}

目前,此代码似乎使cell.notesLabel 始终隐藏,因为在点击单元格时似乎没有调用cellForRowAtIndexPath。

有没有人能解决这个问题或更好的实施?我确信必须有一种更简单的方法。

2 个答案:

答案 0 :(得分:1)

我会考虑调查自动调整大小的单元格。

tableView.estimatedRowHeight = 44.0
tableView.rowHeight = UITableViewAutomaticDimension

随着您的内容发生变化,您必须重新加载单元格并为其设置动画,但我认为这将是一个更好的实现:

reloadRowsAtIndexPaths(_ indexPaths: [AnyObject], withRowAnimation animation: UITableViewRowAnimation)

听起来你有很多手势正在发生,这可能会导致你的问题。使用可拖动单元格,确保平移手势正在改变偏移量的contentView,或者如果您在视图中包含所有单元格内容,请确保将其应用于该视图。

答案 1 :(得分:0)

对于有兴趣解决此问题的人,这是我的解决方案。

变量selectedRowIndex跟踪用户点击的最后一行的indexPath.row。

标签1,标签2和标签3在单元格未处于展开状态时被单元格边界外的隐藏。

EditActionsForRowAt在用户滑动删除时被调用,因此此时我隐藏了当前未向用户显示的标签,因为它们超出了单元格的边界。有一些if语句用于检查标签是否应该隐藏。

var selectedRowIndex = -1

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if indexPath.row == selectedRowIndex {
        return 95 //Expanded
    }
    return 50 //Not expanded
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let cell = tableView.cellForRow(at: indexPath) as! MyTableViewCell
    if selectedRowIndex == indexPath.row {
        selectedRowIndex = -1
    } else {
        selectedRowIndex = indexPath.row
        cell.label1.isHidden = false
        cell.label2.isHidden = false
        cell.label3.isHidden = false
    }
    tableView.reloadRows(at: [indexPath], with: .automatic)

}

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
    let cell = tableView.cellForRow(at: indexPath) as! MyTableViewCell
    if indexPath.row != selectedRowIndex {
        cell.label1.isHidden = true
        cell.label2.isHidden = true
        cell.label3.isHidden = true
    }
    return nil
}

希望能帮助别人!