首页 > 解决方案 > Cocoa macOs NSMenu, contextMenu, 右键

问题描述

我在互联网上搜索了所有帖子,但找不到任何可以解决我的问题的 mac 应用程序。当我启动应用程序并右键单击时,不显示 contextMenu。

// MARK: - var

private var selectedPatients: [ArrayPatient] = []

// MARK: - NSMenu

var contextMenu: NSMenu {
        let rightClickMenu = NSMenu()
        
        let deleteItem = NSMenuItem()
        deleteItem.title = LocalizationUtility.localizedString("title.delete")
        deleteItem.target = self
        deleteItem.action = #selector(didSelectContextItem(_ :))
        deleteItem.tag = 0
        
        let editPatientItem = NSMenuItem()
        editPatientItem.title = LocalizationUtility.localizedString("contextMenu.editGroupInfo")
        editPatientItem.target = self
        editPatientItem.action = #selector(didSelectContextItem(_ :))
        editPatientItem.tag = 1
        
        if selectedPatients.count == 1 {
            rightClickMenu.addItem(editPatientItem)
        }
        
        rightClickMenu.addItem(deleteItem)
        
        return rightClickMenu
    }




// MARK: - ContextMenuDelegate
    
    func collectionView(_ collectionView: NSCollectionView, didRightClickItemAt indexPath: IndexPath, with event: NSEvent) {
        
        if let patient = dataSource?[indexPath.item], !selectedPatients.contains(patient as! ArrayPatient) {
            self.collectionView(collectionView, didSelectItemsAt: [indexPath])
        }
        
        NSMenu.popUpContextMenu(contextMenu, with: event, for: collectionView)
    }
    
    @objc func didSelectContextItem(_ sender: NSMenuItem) {
        if sender.tag == 0 {
            // Delete
            if AlertUtility.showConfirmationAlert(withTitle: "alert.deleteGroup") {
                deleteObject(selectedPatients)
            }
        } else if sender.tag == 1 {
            // Edit info Group
            openEditObjectController(selectedPatients.first)
        }
    }

标签: swiftcocoacontextmenunsmenu

解决方案


推荐阅读