gpt4 book ai didi

swift - 在 NSTokenField 上获取鼠标点击

转载 作者:搜寻专家 更新时间:2023-10-30 22:18:35 25 4
gpt4 key购买 nike

我想实现一个NSTokenField,它将显示 token ——当鼠标悬停在 token 上时——显示一个删除图标。随后,当我单击该图标时,我希望删除 token 。

经过大量搜索,标准的 NSTokenField 似乎无法做到这一点。如果有人知道怎么做,请告诉我。

我看过https://github.com/octiplex/OEXTokenField并基于该代码,我在 Swift 中实现了 CustomTokenField。到目前为止一切顺利,我有一个可用的 CustomTokenField,当我将鼠标悬停在 token 上时,它会显示一个删除图标。

下一阶段结果是我自己想不通的问题。如何让点击 token 触发回调。?

token 类派生自 NSTextAttachmentCell,CustomTokenField 派生自 NStokenField:

class CustomTokenAttachmentCell: NSTextAttachmentCell {
. . .
}

class CustomTokenField: NSTokenField {
. . .
}

我尝试从两个不同的角度来探讨这个问题:

通过 CustomTokenAttachmentCell

NSTextAttachmentCell 实现了 NSTextAttachmentCellProtocol。

public protocol NSTextAttachmentCellProtocol : NSObjectProtocol {
. . .
public func wantsToTrackMouse() -> Bool
public func highlight(flag: Bool, withFrame cellFrame: NSRect, inView controlView: NSView?)
public func trackMouse(theEvent: NSEvent, inRect cellFrame: NSRect, ofView controlView: NSView?, untilMouseUp flag: Bool) -> Bool
. . .
}

这是有希望的。因此,我在 CustomTokenAttachmentCell 中实现了这些方法,并且实际上正在调用 wantsToTrackMouse()。我已经实现了它以返回“true”。

override func trackMouse(theEvent: NSEvent, inRect cellFrame: NSRect, ofView controlView: NSView?, untilMouseUp flag: Bool) -> Bool {
Swift.print(“trackMouse”)
return true
}

override func highlight(flag: Bool, withFrame cellFrame: NSRect, inView controlView: NSView?) {
Swift.print("highlight")
}

override func wantsToTrackMouse() -> Bool {
Swift.print(“trackMouse”)
return true
}

其他两个方法永远不会被调用。是否需要做其他事情才能使它们被调用?

通过 CustomTokenField

我还尝试从 CustomTokenField 解决这个问题。可以使用 MouseDown() 获取鼠标事件,但我做不到找到一种从单元实际访问 token 的方法。

我在 StackOverflow 上看到了很多帖子,也看到了提示,但似乎没有一个指向正确的方向。

不知何故,我得出的结论是,只有在层次结构中存在 NSControl 的情况下,您才能获取鼠标事件。对于并非如此的代币。 NSControl 是 View 层次结构的一部分,因此我尝试通过 CustomTokenField 实现此目的,但我也在那里遇到了死胡同。例如。这个问题Clicking token in NSTokenField完全相同,但设置操作或目标将产生 fatal error ,因为 setActionsetTarget 是基类的 stub 。

我是 Coacoa 的初级程序员,所以希望这只是缺乏知识的问题。

如有任何建议,我们将不胜感激。

最佳答案

您是否尝试过在整个 CustomTokenAttachmentCell View 的顶部添加一个 NSButton?然后将 @IBOutlet 操作 添加到点击按钮,并通过委托(delegate)将其传递给 TokenField,您可以在其中控制显示的 token 。

我也在尝试在我的应用程序中实现这一点,因此如果您能够分享任何代码,我们将不胜感激。谢谢!

关于swift - 在 NSTokenField 上获取鼠标点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39172561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com