【问题标题】:SwiftUI macOS Scroll a List With Arrow Keys While a TextField is ActiveSwiftUI macOS 在 TextField 处于活动状态时使用箭头键滚动列表
【发布时间】:2020-01-16 06:49:34
【问题描述】:

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

我玩过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)")
        }
      }
    }
  }
}

【问题讨论】:

  • 你好,我遇到了和你一样的问题。想知道您是否有任何解决方案?我认为问题在于 TextField 接管了所有 onMoveCommand,并使 List 无法对事件做出反应。不确定您是否取得了任何进展,如果您有解决方案,请告诉我。谢谢
  • 我遇到了同样的问题,最终使用 AppKit 而不是 SwiftUI 重写了整个视图,以便能够拦截关键事件并控制 tableview 的选择。

标签: swift macos swiftui swiftui-list


【解决方案1】:

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

Source of a text field with suggestions

【讨论】:

    猜你喜欢
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 2021-06-06
    相关资源
    最近更新 更多