#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() } } }