NavigationLink 视图参数 SwiftUI
NavigationLink View Parameter SwiftUI
当我在我的视图中调用 NavigationImageView 时,我想在每次调用中发送不同的视图,这样我就可以导航不同的视图 views.But 问题是如何在 NavigationLink 中发送视图参数。我尝试了 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))))
}
}
}
你需要在这里使用泛型,因为事先不知道目标视图的类型:
struct NavigationImageView<DestinationType: View>: View {
var item : Store
var destinationView: DestinationType
// ... other code
}
看看下面的例子...
您的 属性 必须是 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")
}
}
}
当我在我的视图中调用 NavigationImageView 时,我想在每次调用中发送不同的视图,这样我就可以导航不同的视图 views.But 问题是如何在 NavigationLink 中发送视图参数。我尝试了 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))))
}
}
}
你需要在这里使用泛型,因为事先不知道目标视图的类型:
struct NavigationImageView<DestinationType: View>: View {
var item : Store
var destinationView: DestinationType
// ... other code
}
看看下面的例子...
您的 属性 必须是 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")
}
}
}