If you need to help iOS 13-14 you should utilize .onAppear
hooked up to the vacation spot
.
If you need to help iOS 15 you should utilize .process
hooked up to the vacation spot
.
struct Retailer{
var gadgets: [Task] = [.init(name: UUID().uuidString), .init(name: UUID().uuidString), .init(name: UUID().uuidString)]
var chosen: Process?
struct Process: Identifiable{
let id: UUID = .init()
let title: String
}
}
@obtainable(iOS 15.0, *)
struct OnSelectView: View {
@Surroundings (.colorScheme) var colorScheme:ColorScheme
@Surroundings(.presentationMode) var presentationMode: Binding<PresentationMode>
@State var retailer: Retailer = .init()
var physique: some View {
NavigationView{
Checklist {
ForEach(retailer.gadgets, id:.id) { taskObj in
NavigationLink(vacation spot:
detailView(taskObj)
//.onAppear{ //or
.process {
//do one thing right here
retailer.chosen = taskObj
}
) {
Textual content(taskObj.title)
}
}
}
}
}
@ViewBuilder func detailView (_ process: Retailer.Process) -> some View{
VStack{
Textual content(process.title)
if let chosen = retailer.chosen{
Textual content(chosen.title)
}else{
ProgressView()
}
}
}
}
The choices above should not technically carry out earlier than navigation they’re carried out because the view “seems”.
If you need to help iOS 16 it’s best to use NavigationStack
together with NavigationPath
and navigationDestination
.
@obtainable(iOS 16.0, *)
struct OnSelectView: View {
@Surroundings (.colorScheme) var colorScheme:ColorScheme
@Surroundings(.presentationMode) var presentationMode: Binding<PresentationMode>
@State var retailer: Retailer = .init()
@State var path: NavigationPath = .init()
var physique: some View {
NavigationStack(path: $path){
Checklist {
ForEach(retailer.gadgets, id:.id) { taskObj in
Button {
//Do one thing
retailer.chosen = taskObj
path.append(taskObj)
} label: {
HStack{
Textual content(taskObj.title)
Spacer()
Picture(systemName: "chevron.ahead")
.foregroundColor(Shade(UIColor.placeholderText))
}
}.buttonStyle(.plain)
}
}.navigationDestination(for: Retailer.Process.self) { process in
detailView(process)
}
}
}
@ViewBuilder func detailView (_ process: Retailer.Process) -> some View{
VStack{
Textual content(process.title)
if let chosen = retailer.chosen{
Textual content(chosen.title)
}else{
ProgressView()
}
}
}
}