как перейти к другому просмотру onclick LazyVGrid GridItem в SwiftUI?

#swiftui

Вопрос:

Я использую LazyVGrid, который динамически заполняется. Я хочу перейти на другую страницу по элементу сетки щелчка.

Вот изображение сетки..

введите описание изображения здесь

У меня есть три точки зрения.Когда я нажимаю Fundtransfer GridItem, он переходит в FundtransferView. Если я нажму на элемент «Пополнить сетку», он перейдет в раздел «Просмотр».

Вот код создания gridview

 LazyVGrid(columns: columns, spacing: 0) {  ForEach(arrayRes.indices) { index in  Group{  VStack{  Image("((arrayRes[index]["icon"]) as! String)")  .resizable()  .scaledToFit()  .frame(width: 50, height: 50, alignment: .center)    Text("((arrayRes[index]["displayValue"]) as! String)")  .padding(.top,5)  .padding(.bottom,5)  //.padding(.bottom,10)  }.padding(.top,5)  .frame(minWidth: 0, maxWidth: .infinity, minHeight: 60)  // .padding()    }.listRowBackground(backgroundColor)  .padding(5)  .background(Color.white)  .cornerRadius(10)  .padding([.top, .horizontal])  //.shadow(color: .blue, radius: 5)  .shadow(color: Color.blue.opacity(0.2), radius: 4, x: 0, y: 2)  .gesture(TapGesture().onEnded{    getGridItem(index: index)    })  }  }  

Вот функция, в которой я получаю индекс элемента сетки и отдельный вид для навигации. Ниже приведена функция etGridItem, как перейти на другую страницу?

 func getGridItem(index:Int){   var softcode = ((arrayRes[index]["softcode"]) as! String)  if("FundTransfer" == softcode){   //Navigate to fund transfer view   }else if("MYB_BKASH" == softcode){   //Navigate to fund top up view  }   }  

Here is two destinaiton view:

 struct FundtransferView: View {  var body: some View {  Text("Hello, FundtransferView")  }  }    struct TopupView: View {  var body: some View {  Text("Hello, TopupView!")  }  }  

С помощью функции getGridItem, как перемещаться по FundtransferView и TopupView?

Ответ №1:

пример:

введите описание изображения здесь

 struct DetailView: View {  var index: Int  var body: some View {    if index == 0 {  FundtransferView()  }  else {  TopupView()  } }  struct FundtransferView: View {  var body: some View {  Text("Hello, FundtransferView")  } }  struct TopupView: View {  var body: some View {  Text("Hello, TopupView!")  }  } }  struct ItemView: View {  var image: String  var body: some View {  Group{  VStack{  Image(systemName: image)  .resizable()  .scaledToFit()  .frame(width: 50, height: 50, alignment: .center)  Text(image)  .padding(.top,5)  .padding(.bottom,5)  //.padding(.bottom,10)  }.padding(.top,5)  .frame(minWidth: 0, maxWidth: .infinity, minHeight: 60)  // .padding()  }.listRowBackground(Color.black)  .padding(5)  .background(Color.white)  .cornerRadius(10)  .padding([.top, .horizontal])  //.shadow(color: .blue, radius: 5)  .shadow(color: Color.blue.opacity(0.2), radius: 4, x: 0, y: 2)  } } struct ContentView: View {   @State var index: Int = 0 @State var arrayRes: [String] = ["person","heart"]  let columns = [GridItem(.adaptive(minimum: 80))]   var body: some View {    LazyVGrid(columns: columns, spacing: 0) {  ForEach(arrayRes.indices) { index in  NavigationLink(destination:  DetailView(index: index)  ) {  ItemView(image:arrayRes[index])  }  }  }  } }  struct ContentView_Previews: PreviewProvider {  static var previews: some View {  NavigationView {  ContentView()  }  } }