SwiftUI macOS 在 TextField 处于活动状态时使用箭头键滚动列表

Dav*_*ler 10 macos swift swiftui swiftui-list

我想使用 SwiftUITextField和 SwiftUIList在项目列表上方呈现“搜索框”。大致类似于 Safari 的“帮助”菜单项中的搜索框……它提供了一个搜索框,您可以在其中输入文本,同时使用向上和向下箭头键浏览结果列表。

Safari 帮助菜单项

我已经对 "parent" 进行了onMoveCommand, focusable, 和调整NSWindow,但还没有找到一种清晰而明显的方法TextField来不断接受输入,同时仍然能够List使用向上和向下箭头键导航底层。以下代码允许在 中输入文本TextField,或在列表条目中导航,但不能同时...

struct ContentView: View {

  @State var text: String = ""
  @State var selection: Int? = 1

  var body: some View {
    VStack {
      TextField("Enter text", text: $text)
      List(selection: $selection) {
        ForEach((1...100), id: \.self) {
          Text("\($0)")
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

小智 3

您可以将 NSTextField 包装在 NSViewRepresentable 中,并使用 NSTextFieldDelegate 来拦截向上和向下移动键。你可以看看我的建议演示。

带有建议的文本字段的来源