在编辑模式

时间:2015-11-26 20:52:57

标签: ios swift uitableview

我正在尝试学习Swift,但我的项目中有一个问题让我疯狂。 我在由parse.com提供的ViewController中有一个工作列表。我设法实现了一个滑动功能,显示删除和编辑按钮。这工作正常。现在我希望用户能够重新排序单元格。所以我成功实现了一个按钮,将表格置于编辑模式。我的两个问题是:

  1. 当我进入编辑模式时,我只想重新排序单元格,因为编辑和删除是通过滑动完成的(通过" tableView(tableView:UITableView,editActionsForRowAtIndexPath indexPath:NSIndexPath)&#34在编辑模式和触摸自动提供的删除圈时,我怎样才能看到用户没有看到2个按钮进行删除和编辑?

  2. 是否可以完全删除删除圈?使用" UITableViewCellEditingStyle.None"还会禁用滑动功能。

  3. 提前致谢!

4 个答案:

答案 0 :(得分:2)

为了避免在左侧设置UITableView isEditing为true时出现的圆形红色删除按钮,单击它时不执行任何操作,对我来说最小的是(Swift 4,iOS 11)

//避免单元格左侧的圆形红色删除按钮:

func tableView(_ tableView: UITableView, shouldIndentWhileEditingRowAt indexPath: IndexPath) -> Bool {
    return false
}


func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {
    return .none
}

我也有这些可能相互作用的功能:

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
    return savedTempTable.isEditing
}

// Including this function in the delegate enable left-swipe deleting
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath)
{
    if editingStyle == .delete {
        savedConversions.remove(at: indexPath.row)
    }
}


// Including this function enables reordering
func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath,to destinationIndexPath: IndexPath)
{
    let elem = savedConversions.remove(at: sourceIndexPath.row)
    savedConversions.insert(elem, at: destinationIndexPath.row)
}

答案 1 :(得分:1)

虽然人们可以通过滑动删除一行,但不应删除编辑模式下的删除按钮。人们可能不知道滑动手势,并且通过删除删除按钮(他们在编辑模式中已经预期),应用程序变得更难以使用。

如果您确实要删除删除按钮,则必须实现委托方法tableView(_:editingStyleForRowAtIndexPath:)。在那里,您可以在屏幕处于编辑模式时返回.None,而在屏幕不显示时返回.Delete

要启用重新排序,您必须实施数据源方法tableView(_:canMoveRowAtIndexPath:)tableView(_:moveRowAtIndexPath:toIndexPath:)

答案 2 :(得分:1)

您可以按照这种方式在编辑时删除删除图标:

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
     return UITableViewCellAccessoryNone;
 }

答案 3 :(得分:0)

override func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {
    return .none
}

override func tableView(_ tableView: UITableView, shouldIndentWhileEditingRowAt indexPath: IndexPath) -> Bool {
    return false
}