【问题标题】:Adding a NSMenu to a NSTableCellView which pops up on right click将 NSMenu 添加到右键单击时弹出的 NSTableCellView
【发布时间】:2017-01-27 22:10:02
【问题描述】:

当用户在NSTableView 中右键单击NSTableCellView 时,我想弹出一个NSMenu

let cell = myTableView.make(withIdentifier: "myCustomTableCellView", owner: self) as! MyTableCellView // subclass of NSTableCellView

let menu = NSMenu()
menu.autoenablesItems = false
menu.addItem(NSMenuItem(title: "Test", action: nil, keyEquivalent: ""))

cell.menu = menu

但如果用户单击单元格,菜单不会弹出。

我找不到任何 sendActionOn 方法或类似的方法。

如果有人能帮忙就太好了!

【问题讨论】:

    标签: swift nstableview nsmenu nsmenuitem nstablecellview


    【解决方案1】:

    不需要做任何花哨的事情。您可以在 Interface Builder 中设计菜单。

    1. Menu 从对象库拖到您的视图控制器中
    2. 按住 Ctrl 键从 Table View 拖动到此菜单并将其连接到 menu 插座

    1. 将菜单项与IBActions 中的View Controller 连接:

    假设您的右键菜单上有 3 个操作

    @IBAction func menuAction1(_ sender: Any) {
        print("You clicked Item 1 for row \(self.tableView.selectedRow)")
    }
    
    @IBAction func menuAction2(_ sender: Any) {
        print("You clicked Item 2 for row \(self.tableView.selectedRow)")
    }
    
    @IBAction func menuAction3(_ sender: Any) {
        print("You clicked Item 3 for row \(self.tableView.selectedRow)")
    }
    

    【讨论】:

    • 谢谢!它基本上可以工作,但是这样 TableView 中的每种类型的 TableCellView 都有那个菜单。我的问题是如何将 NSMenu(以编程方式)添加到特定的 TableCellView?
    • 虽然这适用于显示菜单,但右键单击不会触发 tableview 上的行选择,因此 self.tableView.selectedRow 始终是 -1,除非该行是通过正常 (左)先点击。
    • 应该使用self.tableView.clickedRow来获取点击的行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多