簡體   English   中英

SwiftUI 使用 NavigationLink 列表多選

[英]SwiftUI list multiselect with NavigationLink

在 macOS 上運行的 SwiftUI 中,對於列表中的每個項目都是 NavigationLink 的項目列表,多選不起作用。 如果完全相同的視圖包含 NavigationLink,則它工作正常。 如何在 macOS 上運行的同一個列表中同時擁有多選NavigationLink? 也許這需要一種不同的方法來構建不依賴於列表的 NavigationLinks? 這可能嗎? 我試過在選擇多行時有條件地禁用 NavigationLink,但這沒有效果(例如.disabled(selection.count > 1) )。

多選不起作用的示例(注意在屏幕截圖中,當按住 Shift 鍵並單擊三個結果時,會短暫顯示完整選擇,然后捕捉到最后單擊的項目):

struct TestListView: View {
  @State var selection = Set<String>()
  let options = ["a", "b", "c"]

  var body: some View {
    NavigationView {
      List(options, id: \.self, selection: $selection) { item in
        NavigationLink {
          Text(String(describing: selection))
        } label: {
          Text(item)
        }
      }
    }
  }
}

上面代碼的截屏

多選工作正常的示例:

struct TestListView: View {
  @State var selection = Set<String>()
  let options = ["a", "b", "c"]

  var body: some View {
    NavigationView {
      List(options, id: \.self, selection: $selection) { item in
        Text(item)
      }
      Text(String(describing: selection))
    }
  }
}

在此處輸入圖像描述

看起來我或多或少在其中一個問題示例中有過。 一個更復雜的例子中的一個單獨的錯誤誤導了我。 解決方案實際上是上面的第二個選項。

換句話說,不要嘗試混合使用 NavigationLink 和 multi-selection 而是跳過 NavigationLink 並將目標視圖放在列表旁邊(僅在 macOS 上測試過)。

struct TestListView: View {
  @State var selection = Set<String>()
  let options = ["a", "b", "c"]

  var body: some View {
    NavigationView {
      List(options, id: \.self, selection: $selection) { item in
        Text(item)
      }
      if selection.isEmpty {
        Text("Empty")
      } else if selection.count > 1 {
        Text("Multiple")
      } else if let selection = selection.first {
        Text(selection)
      }
    }
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM