滑动

时间:2016-12-03 10:44:41

标签: ios swift uitableview didselectrowatindexpath

我有一个带有可扩展单元格的TableView,使用以下代码:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    let index = indexPath

    if(selectedIndexPath != nil) {
        if(index == selectedIndexPath) {
            return 90
        }
        else {
            return 60
        }
    }
    else {
        return 60
    }
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    switch selectedIndexPath {
    case nil:
        selectedIndexPath = indexPath
    default:
        if selectedIndexPath! == indexPath {
            selectedIndexPath = nil
        }
        else {
            selectedIndexPath = indexPath
        }
    }
    tableView.reloadRows(at: [indexPath], with: .automatic)
}

现在,我还想使用代码here为每个单元格添加滑动手势。

func tableView(tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
        let share = UITableViewRowAction(style: .Normal, title: "Share") { action, index in
            print("share button tapped")
        }
        return [share]
}

一切都很好,除了刷子时细胞的高度。

  1. 细胞滑动,有时候,身高很高(即使它们不是 选择的)
  2. 细胞刷,有时,身高小(即使它们是 选择)。
  3. 我认为这可能是因为最后选择的细胞高度。

    我尝试使用selectedIndexPath = indexPath中的editActionsForRowAt进行修复,但问题仍然存在。

    https://i.stack.imgur.com/iQCEe.png

    编辑:我注意到,如果heightForRowAt总是返回60,则问题仍然存在。

3 个答案:

答案 0 :(得分:0)

func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
   let index = indexPath

    if(selectedIndexPath != nil) {
        if(index == selectedIndexPath) {
            return 90
        }
        else {
            return 60
        }
    }
    else {
        return 60
    }
}

它对我或你的工作也可以检查是否有任何tableview单元格都适当。或者你只能使用任何一种tableview高度方法来获得更好的结果。

答案 1 :(得分:0)

我相信当您进入单元格的编辑模式时,您的输入会被意外地选中/取消选择,原因是单元格上的初始点击或用户在您尝试访问编辑操作时所做的其他操作。

为避免这种情况,请在tableView.allowsSelectionDuringEditing = false

中设置viewDidLoad

或者,尝试使用didSelectRowAt将代码包装在if tableView.editing == false中。

答案 2 :(得分:0)

我解决了最初隐藏内容(在我的情况下是一个名为const uint8 unsignedByteArray[] = {189U, 139U, 64U, 0U}; 的按钮)在点击后显示(查看>绘图>检查隐藏)和{{1}我用:

button