表格视图,单元格编辑和拖动

时间:2015-10-23 22:29:55

标签: swift uitableview tableviewcell

我有一个快速的app应用程序,其中单元格是动态的。我想要实现的是,用户可以侧面滑动一个单元格,它会显示两个图块,一个用于编辑,一个用于删除(这个示例将在消息应用程序中,您可以在其中轻扫以删除选项)

我使用以下方式显示了两个图块:

func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {
    let editRowAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: " Edit ", handler:{action, indexpath in
    });
    moreRowAction.backgroundColor = UIColor.orangeColor()

    let deleteRowAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "Delete", handler:{action, indexpath in

    return [editRowAction, deleteRowAction]
}

我遇到的第一个问题是,当选择编辑选项时,如何以编程方式关闭侧滑动,以便隐藏图块并且用户可以看到单元格中的文本字段?

第二个问题,当一个单元格处于编辑模式时,我希望能够在tableview中移动单元格:以下教程我实现了以下内容:

func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool {
    return true
}
func tableView(tableView: UITableView, moveRowAtIndexPath sourceIndexPath: NSIndexPath, toIndexPath destinationIndexPath: NSIndexPath) {
    let sourceRow = sourceIndexPath.row;
    let destRow = destinationIndexPath.row;
    let object = ArrayList.objectAtIndex(sourceRow)
    ArrayList.removeObjectAtIndex(sourceRow)
    ArrayList.insertObject(object, atIndex: destRow)
}

并在我想将单元格置于移动模式时设置以下内容

    TableView.setEditing(true, animated: true)

我想要的是哪种,但是当我将其置于编辑模式时,我会在单元格的左侧看到删除图标(带有白色短划线的红色圆圈),我不想要,理想情况下我&# 39; d喜欢我自己的图标,因此用户可以选择并拖动单元格,但我觉得这可能会略微推动它。

由于

1 个答案:

答案 0 :(得分:3)

要删除删除按钮,您应该可以将编辑样式设置为无(或其他)

func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle {
    return tableView.editing ? UITableViewCellEditingStyle.None : UITableViewCellEditingStyle.Delete
}

要在滑动后隐藏到按钮,您可以设置tableView.editing或重新加载单元格。

tableView.editing = false

alt

tableView.reloadRowsAtIndexPaths(indexPaths: [NSIndexPath], withRowAnimation: UITableViewRowAnimation.Automatic)

//所有涉及的委托方法:

func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
    return true
}

func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {
    let editRowAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: " Edit ", handler:{action, indexpath in
            self.tableView.editing = false
    })

    let deleteRowAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "Delete", handler:{action, indexpath in
            self.tableView.editing = false
    })

    return [editRowAction, deleteRowAction]
}

func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle {
    return tableView.editing ? UITableViewCellEditingStyle.None : UITableViewCellEditingStyle.Delete
}

func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool {
    return true
}

func tableView(tableView: UITableView, moveRowAtIndexPath sourceIndexPath: NSIndexPath, toIndexPath destinationIndexPath: NSIndexPath) {

}