我正在尝试学习Swift,但我的项目中有一个问题让我疯狂。 我在由parse.com提供的ViewController中有一个工作列表。我设法实现了一个滑动功能,显示删除和编辑按钮。这工作正常。现在我希望用户能够重新排序单元格。所以我成功实现了一个按钮,将表格置于编辑模式。我的两个问题是:
当我进入编辑模式时,我只想重新排序单元格,因为编辑和删除是通过滑动完成的(通过" tableView(tableView:UITableView,editActionsForRowAtIndexPath indexPath:NSIndexPath)&#34在编辑模式和触摸自动提供的删除圈时,我怎样才能看到用户没有看到2个按钮进行删除和编辑?
是否可以完全删除删除圈?使用" UITableViewCellEditingStyle.None"还会禁用滑动功能。
提前致谢!
答案 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
}