NavigationLink视图参数SwiftUI
当我在视图中调用NavigationImageView时,我希望在每次调用中发送不同的视图,以便可以导航不同的视图。但问题是如何在NavigationLink中发送视图参数。我尝试了View和UIView,但它给了我错误NavigationLink视图参数SwiftUI,swiftui,swiftui-navigationlink,Swiftui,Swiftui Navigationlink,当我在视图中调用NavigationImageView时,我希望在每次调用中发送不同的视图,以便可以导航不同的视图。但问题是如何在NavigationLink中发送视图参数。我尝试了View和UIView,但它给了我错误 struct NavigationImageView: View { var item : Store var destinationView: View var body: some View {
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))))
}
}
}
您需要在此处使用泛型,因为目标视图的类型事先未知:
struct NavigationImageView<DestinationType: View>: View {
var item : Store
var destinationView: DestinationType
// ... other code
}
struct NavigationImageView:视图{
变量项:存储
var destinationView:DestinationType
//…其他代码
}
看看下面的示例
您的属性必须是anyview
,然后您可以将任何视图指定给它,并将其用作目的地
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")
}
}
}