gpt4 book ai didi

swiftui - 在 SwiftUI Mac 应用程序列表中删除右键单击行的轮廓

转载 作者:行者123 更新时间:2023-12-05 05:46:07 29 4
gpt4 key购买 nike

我正在使用 SwiftUI 构建一个 macOS 应用程序,我试图在右键单击 List 项目时删除(甚至掩盖)添加到它的边框。

这里是默认的:

List Row

现在通过右键单击和 contextMenu View 修饰符:

List Row Right Click

我认为这是一个 NSTableView 怪癖,所以我尝试了这三个 Stack Overflow 帖子中的方法:

  1. Customize right click highlight on view-based NSTableView
  2. NSTableView with menu, how to change the border color with right click?
  3. Disabling the NSTableView row focus ring
  4. NSTableView: blue outline on right-clicked rows

我无法使它们中的任何一个工作,这可能是因为我无法将 NSTableView 子类化,而只能使用 覆盖其属性和方法>扩展。到目前为止,这是我成功删除默认表格背景等的内容:

extension NSTableView{
open override func viewDidMoveToWindow() {
super.viewDidMoveToWindow()

//Remove default table styles
backgroundColor = NSColor.clear
enclosingScrollView!.drawsBackground = false
selectionHighlightStyle = .none
}
}

有什么方法可以删除 SwiftUI 中的右键单击边框吗?我什至愿意用其他 View 覆盖它,但我似乎无法在表格单元格周围的空间中绘制 SwiftUI View 。

最佳答案

我找到了一个解决方法。我把我的 ListZStack然后设置它的 opacity归零。然后我构建了相同列表的完全自定义版本,但使用 LazyVStack :

//Message List
ZStack{
//Ghost list for keyboard control
List($model.messages, id: \.self, selection: $model.selectedMessages){ $message in
MessageItemView(message: $message)
}
.focusable()
.opacity(0)

//Custom UI for the above List
ScrollView{
ZStack{
LazyVStack(spacing: 5){
ForEach($model.messagesToday){ $message in
MessageItemView(message: $message)
}
}
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
.frame(maxWidth: .infinity, maxHeight: .infinity)

每个列表都绑定(bind)到相同的模型,所以如果我单击 message在自定义 UI 中选择它,同样的东西会在不可见的 List 中被选中. List 中表格使用的所有键盘快捷键看起来他们正在开发自定义版本。

那么这如何解决我原来的问题呢?您可以右键单击自定义MessageItemView单元格周围的默认环是不可见的,但是 contextMenu仍然有效(它在我的 MessageItemView 中定义)。

这并没有我想要的那么优雅,但是 100% 控制 UI 很不错,但仍然可以免费使用 List 提供的所有键盘控件。 .

关于swiftui - 在 SwiftUI Mac 应用程序列表中删除右键单击行的轮廓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71229686/

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