gpt4 book ai didi

swift - 如何检测 SwiftUI 中的右键单击?

转载 作者:行者123 更新时间:2023-12-03 09:16:38 25 4
gpt4 key购买 nike

我在写 a simple Mines app帮助我了解 SwiftUI。因此,我希望主要点击(通常是 LMB)来“挖掘”(显示那里是否有地雷),然后二次点击(通常是人民币)来放置一个标志。

我有挖掘工作!但我无法弄清楚如何放置标志,因为我无法弄清楚如何检测二次点击。

Here's what I'm trying :

BoardSquareView(
style: self.style(for: square),
model: square
)
.gesture(TapGesture().modifiers(.control).onEnded(self.handleUserDidAltTap(square)))
.gesture(TapGesture().onEnded(self.handleUserDidTap(square)))

正如我之前暗示的, handleUserDidTap 返回的函数在点击时被正确调用,但由 handleUserDidAltTap 返回的仅在我按住 Control 键时调用。这是有道理的,因为这就是代码所说的......但我没有看到任何可以使它注册二次点击的 API,所以我不知道还能做什么。

我也试过这个,但行为似乎相同:

BoardSquareView(
style: self.style(for: square),
model: square
)
.gesture(TapGesture().modifiers(.control).onEnded(self.handleUserDidAltTap(square)))
.onTapGesture(self.handleUserDidTap(square))

最佳答案

就目前 SwiftUI 的情况而言,这不是直接可能的。我相信它会在 future ,但目前,TapGesture显然主要集中在没有“右键单击”概念的 iOS 用例上,所以我认为这就是忽略这一点的原因。注意“长按”概念是一等公民形式的LongPressGesture ,而且这几乎只用于支持这一理论的 iOS 上下文中。
也就是说,我确实想出了一种方法来完成这项工作。您需要做的是退回旧技术,并将其嵌入到您的 SwiftUI View 中。

struct RightClickableSwiftUIView: NSViewRepresentable {
func updateNSView(_ nsView: RightClickableView, context: NSViewRepresentableContext<RightClickableSwiftUIView>) {
print("Update")
}

func makeNSView(context: Context) -> RightClickableView {
RightClickableView()
}
}

class RightClickableView: NSView {
override func mouseDown(with theEvent: NSEvent) {
print("left mouse")
}

override func rightMouseDown(with theEvent: NSEvent) {
print("right mouse")
}
}
我对此进行了测试,它在一个相当复杂的 SwiftUI 应用程序中对我有用。这里的基本方法是:
  • 将您的聆听组件创建为 NSView .
  • 用实现 NSViewRepresentable 的 SwiftUI View 包装它.
  • 将您的实现放入您想要的 UI 中,就像您对任何其他 SwiftUI View 所做的一样。

  • 不是一个理想的解决方案,但它现在可能已经足够了。我希望这可以解决您的问题,直到 Apple 进一步扩展 SwiftUI 的功能。

    关于swift - 如何检测 SwiftUI 中的右键单击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59280263/

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