ios - UITableView 单元格不显示删除菜单

标签 ios swift uitableview uitableviewrowaction

Delete option in Menu not showing

UITableViewCell 未在此弹出菜单中显示“删除”选项。它进入了下面代码中的删除条件,但它没有出现在菜单中。

func tableView(_ tableView: UITableView, canPerformAction action: Selector, forRowAt indexPath: IndexPath, withSender sender: Any?) -> Bool {

    print(action)
    print(action == #selector(delete(_:)))

    if action == #selector(copy(_:)) {
        return true
    }
    if action == #selector(paste(_:)) {
        return true
    }
    if action == #selector(delete(_:)) {
        return true
    }


    return super.canPerformAction(action, withSender: sender)

}

最佳答案

默认情况下,您可以剪切/复制/粘贴(可以通过在 canPerformAction 中返回 false 来阻止其中任何一个),但其他操作(您将看到默认情况下,UITableViewCell 的上下文菜单中不包含总共 20 个,包括删除以及其他 iOS 标准系统操作,如“selectAll”和“makeTextWritingDirectionRightToLeft”)。

如果您想要显示任何其他操作,您必须在您的 UITableViewCell 子类中实现它们。

例如在您的单元格子类中只需添加:

override func delete(_ sender: Any?) {
    print("delete")
}

如果您为删除选择器返回 true,您应该会在任何此类单元格的上下文菜单中看到删除项。 TableView 委托(delegate)中的 performAction 仍然是必需的,否则它根本不会显示菜单,但操作的实际处理是在这个单元格子类方法中。

如果您想添加自定义操作,您可以将它们添加到共享的 UIMenuController 项中,并在 UITableViewCell 子类中实现它们。 (使用 this tutorial 作为引用,以及我自己的测试)。

例如在你的 View Controller 的 viewDidLoad

let menuController = UIMenuController.shared
let item = UIMenuItem(title: "My Custom Action", action: #selector("youraction"))
var items = menuController.menuItems ?? [UIMenuItem]()
items.append(item)
menuController.menuItems = items

然后您需要在您的 UITableViewCell 子类中实现“youraction”,否则它不会显示。

请注意,您在 canPerformAction 中看到的 20 个标准操作都不需要手动添加到共享菜单 Controller 中,只是看起来您需要将它们添加到您的单元格子类中。

关于ios - UITableView 单元格不显示删除菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51027270/

相关文章:

ios - 如何在ios字典中创建包含可变数组的参数(mutabledictionary)

swift - 加载自定义 CollectionViewCell Nib 时 initWithCoder 错误

ios - 我们可以直接在 Xcode 中使用 sketch UI 元素吗?

ios - 如何给 UITableView 底部空白区域染色?

ios - 如何使 UITableview 与 iPhone 5 屏幕尺寸相匹配?

ios - NSString 正则表达式字符串匹配/搜索

ios - Xcode 6 配置文件选择

ios - 关于如何处理 UNUserNotificationCenter 64 限制的问题

swift - 来自 ObservableObject 的绑定(bind)值

ios - 奇怪的 iOS tableView/CALayer 崩溃