I’m using SwfitUI in my project and I have a NavigationView and List. I’m clicking cell after open the detail view and click navigation back button. I want to remove view (it’s struct, in SwiftUI) after click navigation back button. Because if I click the same cell or button again, it isn’t initialize new view, it’s shows old view. I want to do refresh this view. How do I do?
My FirstView Struct is:
struct FirstView: View {
@ObservedObject var viewModel: FirstViewModel
var body: some View {
List(self.viewModel.objects, id: .id) { object in
ZStack {
DetailViewCell(object: object)
NavigationLink(destination: DetailViewBuilder.make(object)) {
EmptyView()
}.buttonStyle(PlainButtonStyle())
}
}
}
}
My DetailView Struct is:
struct DetailView: View {
@ObservedObject var viewModel: DetailViewModel
var body: some View {
ZStack(alignment: .top) {
Color.mainBackground.edgesIgnoringSafeArea(.all)
VStack {
ZStack {
Image("Square")
Image(self.viewModel.currentImage)
}
Text(self.viewModel.currentText)
.padding()
.frame(alignment: .center)
.minimumScaleFactor(0.1)
Spacer()
Button(action: {
self.viewModel.pressedPlayOrPauseButton()
}, label: {
Image(self.viewModel.isPlaying ? "Pause" : "Play").foregroundColor(Color("Orange"))
}).padding()
}
}
}
}
First of all, I go to the detail by clicking a cell in FirstView. Then I come back with the back button. I click on a cell again to go to the details, but a new view does not open. It shows the old view.
Before I forget, My Builder Class is:
final class DetailViewBuilder {
static func make(object: Something) -> DetailView {
let viewModel = DetailViewModel(object: object)
let view = DetailView(viewModel: viewModel)
return view
}
}
Note: If I will use Sheet Presented, It's working. It's creating new View. But I want to use NavigationLink. Thank you.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…