SwiftUI: как отображать разные представления при нажатии кнопки?

Я впервые задаю вопрос, потому что нет вопросов, которые я не читал. Как видите, кнопки содержат фото и описание. Должен быть доступен щелчок по описанию, заголовку и фотографии. По этой причине я не мог использовать NavigationView и NavigationLink, и когда я нажимал эти кнопки, я не мог отображать другое представление. Спасибо, что уделили время.

struct SelectionView: View {
    @State var change = 0
         var body: some View {   
            ScrollView {
                  VStack {
                     Button(action: {
                        self.change = 1
                    }) {
                        VStack {
                            Image("name1")
                                .resizable()
                                .cornerRadius(30)
                                .shadow(radius: 20)
                                .padding()
                                .frame(width: 250, height: 250)
                            Text("name1")
                                .font(.title2)
                                .bold()
                                .foregroundColor(Color("themecolor"))
                            Text("caption")
                                .foregroundColor(.black)
                                .multilineTextAlignment(.center)
                        }
                    }
                    Button(action: {
                        self.change = 2
                    }) {
                        VStack {
                            Image("name2")
                                .resizable()
                                .cornerRadius(30)
                                .shadow(radius: 20)
                                .padding()
                                .frame(width: 250, height: 250)
                            Text("name2")
                                .font(.title2)
                                .bold()
                                .foregroundColor(Color("themecolor"))
                            Text("caption")
                                .foregroundColor(.black)
                                .multilineTextAlignment(.center)
                        }
                    }
                }
            }
        if self.change == 1 {
            FirstView()
        }
        else if self.change == 2 {
            SecondView()
        }
    }
}

Примечание: Xcode версии 12.4 и iOS 14.4

изменить: это может быть полноэкранный режим или доска, которая появляется снизу. Я попробовал модули BulletinBoards, но это не сработало. Конечно, пользователь должен иметь возможность закрыть это открытое окно и вернуться в SelectionView.


person Batuhan    schedule 20.02.2021    source источник


Ответы (1)


Я решил проблему, отказавшись от принудительного использования кнопок. NavigationView и NavigationLinks в полном порядке.

import SwiftUI

struct ContentView: View {
    @State var change = 0
    var body: some View {
        NavigationView(content: {
            ScrollView {
                VStack {
                    NavigationLink(destination: FirstView()) {
                        VStack {
                            Image("image1")
                                .resizable()
                                .cornerRadius(30)
                                .shadow(radius: 20)
                                .padding()
                                .frame(width: 250, height: 250)
                            Text("name1")
                                .font(.title2)
                                .bold()
                                .foregroundColor(Color("themecolor"))
                            Text("caption1")
                                .foregroundColor(.black)
                                .multilineTextAlignment(.center)
                        }
                    }
                    NavigationLink(destination: SecondView()) {
                        VStack {
                            Image("image2")
                                .resizable()
                                .cornerRadius(30)
                                .shadow(radius: 20)
                                .padding()
                                .frame(width: 250, height: 250)
                            Text("name2")
                                .font(.title2)
                                .bold()
                                .foregroundColor(Color("themecolor"))
                            Text("caption2")
                                .foregroundColor(.black)
                                .multilineTextAlignment(.center)
                        }
                    }
                }
            }
        })
    }
}
person Batuhan    schedule 20.02.2021