繁体   English   中英

如何通过 SwiftUI 中列表的每个元素的 onTapGesture 切换到另一个视图?

[英]How to switch to another view by each element's onTapGesture of a list in SwiftUI?

我尝试在列表中添加导航视图,如下所示。 但它不起作用说Result of 'NavigationView<Content>' initializer is unused

var body: some View {
    GeometryReader { geometry in
        VStack {
            List {
                ForEach(self.allItems){ item in
                    TaskRow(item: item)
                    .onTapGesture {
                        // TODO: switch to another view                       
                        NavigationView {
                            VStack {
                                Text("Hello World")
                                NavigationLink(destination: AnotherView()) {
                                    Text("Do Something")
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

而另一个视图是一个 SwiftUI 文件,如下所示:

import SwiftUI

struct AnotherView: View {
    var body: some View {
        VStack{
            Text("Hello, World!")
        }
    }
}

struct AnotherView_Previews: PreviewProvider {
    static var previews: some View {
        AnotherView()
    }
}

我已经尝试了 stackoverflow Switching Views With Observable Objects in SwiftUISwiftUI Change View with Button中的解决方案。 他们在我的情况下都不起作用。

如何通过 SwiftUI 中列表的 onTapGesture 切换到另一个视图,如下所示:

var body: some View {
    GeometryReader { geometry in
        VStack {
            List {
                ForEach(self.allItems){ item in
                    TaskRow(item: item)
                    .onTapGesture {
                        // TODO: switch to another view                       
                        AnotherView()
                    }
                }
            }
        }
    }
}

您必须将整个身体放入NavigationView中。

例子

struct Item: Identifiable {
  let id = UUID()
  let name: String
}

struct ContentView: View {
  var body: some View {
    NavigationView {
      List {
        ForEach([Item(name: "A"), Item(name: "B")]) { value in
          NavigationLink(destination: X(item: value)) {
            Text(value.name)
          }
        }
      }
    }
  }
}

struct X: View {
  let item: Item

  var body: some View {
    Text(item.name)
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM