0

将以下代码粘贴到项目中:

“设备蜂蜜” UIMenu (即UIACtion.

难道我做错了什么?如果这是一个错误?有解决方法吗?

class ViewController: UIViewController {
    let tableview: UITableView = {
        let tv = UITableView()
        tv.frame = UIScreen.main.bounds

        return tv
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        view.addSubview(tableview)
        tableview.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
        tableview.delegate = self
        tableview.dataSource = self
    }
}

extension ViewController: UITableViewDelegate, UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        if cell.detailTextLabel == nil {
            cell = UITableViewCell(style: .value1, reuseIdentifier: "cell")
        }
        cell.textLabel?.text = "Honey"
        cell.detailTextLabel?.text = "iOS developer"

        return cell
    }

    @available(iOS 13.0, *)
    func tableView(_ tableView: UITableView, contextMenuConfigurationForRowAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? {

        return UIContextMenuConfiguration(identifier: nil, previewProvider: nil, actionProvider: { suggestedActions in

            return self.makeContextMenu(for: indexPath)
        })
    }

    @available(iOS 13.0, *)
    func makeContextMenu(for indexPath: IndexPath) -> UIMenu? {

        let copyAction = UIAction(title: "Copy", image: UIImage(systemName: "square.and.arrow.up")) { [weak self] _ in
            guard let self = self else { return }
            let cell = self.tableview.cellForRow(at: indexPath)
            let pasteboard = UIPasteboard.general
            pasteboard.string = cell?.detailTextLabel?.text
        }

        guard let cell = self.tableview.cellForRow(at: indexPath), let title = cell.textLabel?.text else { return nil}
        return UIMenu(title: "Device \(title) ", image: UIImage(systemName: "square.and.arrow.up"), children: [copyAction])
    }
}

在此处输入图像描述

在 Apple 的 WWDC 演示中,他们能够做到这一点,如下所示:

在此处输入图像描述

4

3 回答 3

1

上下文菜单有两个部分:预览和菜单。两者都是可选的。Apple 屏幕截图中的“杂货”是预览,而不是菜单。默认情况下,对单元格进行快照,并将快照显示为预览。Apple 屏幕截图中的菜单本身没有图像,也没有标题。这也是你应该做的!最后一行

return UIMenu(...

...应该没有标题和图像。这个菜单,包含所有其他内容并返回的菜单,是顶级菜单,它的显示方式不同(如您自己的屏幕截图所示)。它看起来最好没有标题,而且根本无法显示图像。它的工作是包装其他所有内容并提供标识符,仅此而已。

然后你会得到这样的东西:

在此处输入图像描述

于 2019-10-16T22:13:42.573 回答
0

这是一个更重要的评论

您在问题中显示的预览非常具有误导性。它看起来像菜单中的其他项目。然而,屏幕截图中的 Groceries 部分是Preview。一个更独特的预览将是这样的:

在此处输入图像描述

图片来源

于 2020-10-20T20:23:17.403 回答
0

我有同样的问题,关于 UIMenu init(title:image:identifier:options:children:) 的文档表示一个图像参数:

image:显示在菜单标题旁边的图像。

看起来是打算在子菜单中使用,如本博客所示: UIMenu 综合指南

于 2021-12-26T19:09:46.193 回答