我试图对基于UIContextMenuConfiguration的应用程序实现新的tableView。我还添加了一个新的委托方法,如下所示。它运作良好,但我想添加一个功能,例如本机iOS 13应用程序。 单击“预览”以显示目的地!

我的问题是:是否可以实现这样的功能?我正在使用Xcode 11.1 GM和Swift 5.1

override func tableView(_ tableView: UITableView, contextMenuConfigurationForRowAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? {
    let provider = UIContextMenuConfiguration.init(identifier: indexPath as NSCopying, previewProvider: { () -> UIViewController? in
        let vc = ViewController.init()
        return vc
    }) { (elements) -> UIMenu? in
        let addToList = UIAction.init(title: "Add to list") { (action) in
            self.performSegue(withIdentifier: "id", sender: self)
        }
        addToList.image = UIImage.init(systemName: "plus")
        return UIMenu.init(title: "", image: nil, identifier: nil, options: .destructive, children: [addToList])
    }
    return provider
}

override func tableView(_ tableView: UITableView, willCommitMenuWithAnimator animator: UIContextMenuInteractionCommitAnimating) {
    if let vc = animator.previewViewController {
        self.show(vc, sender: self)
    }
}

最佳答案

我发现了问题,这是我的错。我使用了错误的方法,所以我只替换了正确的方法。我已经将willCommitMenuWithAnimator方法替换为willPerformPreviewActionForMenuWith,并且运行良好:

override func tableView(_ tableView: UITableView, willPerformPreviewActionForMenuWith configuration: UIContextMenuConfiguration, animator: UIContextMenuInteractionCommitAnimating) {
    animator.preferredCommitStyle = .pop
    animator.addCompletion {
        guard let vc = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(identifier: "ViewController") as? ViewController else { return }
        // 1. Present option
        self.present(vc, animated: true, completion: nil)

        // 2. Push option
        self.navigationController?.pushViewController(vc, animated: true)
    }
}

关于ios - 单击预览以显示目标VC,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58567748/

10-12 00:34