我如何将NSPopover固定到swift5中选定的NSTableCellView

问题描述 投票:0回答:1

我有下面显示的代码,该代码将NSPopover固定到我的NSTableView。我已经遍及Google和SO了,但是我找不到将弹出窗口固定到特定(选定)单元格的方法。任何帮助表示赞赏。

@@ objc func tableViewDoubleAction(sender:NSTableCellView){

let message = "Please Choose"
let controller = NSViewController()
controller.view = NSView(frame: CGRect(x: CGFloat(100), y: CGFloat(50), width: CGFloat(300), height: CGFloat(250)))

let popover = NSPopover()
popover.contentViewController = controller
popover.contentSize = controller.view.frame.size

popover.behavior = .transient
popover.animates = true


popover.show(relativeTo: sender.bounds, of: sender as NSView, preferredEdge: NSRectEdge.maxY)

先谢谢您,这是演示问题的图像:

 an image

nstableview swift5 nspopover nstablecellview
1个回答
0
投票

摘自NSTableView.doubleAction的文档:

clickedRow和clickedColumn属性可让您确定双击是在哪行和列中发生的,或者确定双击而不是在列标题中发生在行中。

@objc func tableViewDoubleAction(sender: NSTableView) {
    let row = sender.clickedRow

摘自clickedRow的文档:

用户单击以触发操作消息的行的索引。如果用户单击表视图中未被表行占用的区域,则返回–1。

    if row >= 0 {

[NSTableView具有方法rect(ofRow:)

返回包含指定索引处的行的矩形。

        let rowRect = sender.rect(ofRow: row)

使用此矩形放置弹出框

        popover.show(relativeTo: rowRect, of: sender, preferredEdge: NSRectEdge.maxY)

全部放在一起:

@objc func tableViewDoubleAction(sender: NSTableView) {
    let row = sender.clickedRow
    if row >= 0 {
        // create the popover
        let rowRect = sender.rect(ofRow: row)
        popover.show(relativeTo: rowRect, of: sender, preferredEdge: NSRectEdge.maxY)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.