【问题标题】:NavigationLink View Parameter SwiftUINavigationLink 查看参数 SwiftUI
【发布时间】:2021-03-27 00:45:55
【问题描述】:

当我在 View 中调用 NavigationImageView 时,我想在每次调用中发送不同的 View,这样我就可以导航不同的视图。但问题是如何在 NavigationLink 中发送 View 参数。我尝试了 View 和 UIView 但它给了我错误。

struct NavigationImageView: View {
    
    var item : Store
    var destinationView: View
    
    var body: some View {
        
        NavigationLink(destination:destinationView ) {
            
            Image(uiImage: (item.banner?.url)!.load())
                .resizable()
                .aspectRatio(CGFloat((item.banner?.ratio)!), contentMode: .fit)
                .cornerRadius(12)
                .shadow(radius: 4)
                .frame(width: CGFloat(UIScreen.main.bounds.width * 0.9), height: CGFloat((UIScreen.main.bounds.width / CGFloat((item.banner?.ratio) ?? 1))))
            
        }
    }
}

【问题讨论】:

    标签: swiftui swiftui-navigationlink


    【解决方案1】:

    这里需要使用泛型,因为事先不知道目标视图的类型:

    struct NavigationImageView<DestinationType: View>: View {
        
        var item : Store
        var destinationView: DestinationType
    
        // ... other code
    }
    

    【讨论】:

      【解决方案2】:

      看看下面的例子……

      您的属性必须是any View,然后您可以将任何视图分配给它将用作您的目的地。

      import SwiftUI
      
      struct ContentView: View {
          
          @State var showViewTwo : Bool = false
          
          //computed property of type some View which returns different views depending on a condition
          var destination : some View { 
              if showViewTwo {
                  return Text("Hello Second View")
              }
              else
              {
                  return Text("Hello First View")
              }
          }
          
          var body: some View {
              
              NavigationView {
                 NavigationLink("Press me", destination: destination)
              }
              
              Button(action: {
                  showViewTwo.toggle()
              }) {
                  Text("Toggle View")
              }
              
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-20
        • 1970-01-01
        • 2019-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-07
        • 2020-02-08
        相关资源
        最近更新 更多