#swiftui #swiftui-navigationlink
#swiftui #swiftui-navigationlink
Вопрос:
Когда я вызываю NavigationImageView в моем представлении, я хочу отправлять разные представления при каждом вызове, чтобы я мог перемещаться по разным представлениям.Но проблема в том, как я могу отправить параметр просмотра в 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))))
}
}
}
Ответ №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")
}
}
}