SwiftUI Как перейти к следующему экрану при нажатии на кнопку

Я могу перейти к следующему экрану с помощью NavigationButton (push) или представить с PresentationButton (present), но я хочу нажать, когда я нажимаю на Buttton()

Button(action: {
// move to next screen
}) {
   Text("See More")
}

Есть ли способ сделать это?

2 ответа

Вы можете использовать NavigationLink

Примечание: попробуйте на реальном устройстве. в симуляторе иногда не работает должным образом.

struct MasterView: View {
    @State var selection: Int? = nil

    var body: some View {
        NavigationView {
            VStack {
                NavigationLink(destination: DetailsView(), tag: 1, selection: $selection) {
                    Button("Press me") {
                        self.selection = 1
                    }
                }
            }
        }
    }
}

struct DetailsView: View {
    @Environment(\.presentationMode) var presentation

    var body: some View {
        Group {
            Button("Go Back") {
                self.presentation.wrappedValue.dismiss()
            }
        }
    }
}

Как видите, чтобы отобразить новое представление, добавьте NavigationLink с участием isActive: $pushView с помощью <.hidden()> чтобы скрыть навигационную "стрелку".

Далее добавить Text("See More") с участием tapGestureчтобы текст реагировал на нажатия. ПеременнаяpushView изменится (false => true), когда вы нажмете на текст "Узнать больше".

import SwiftUI

struct ContentView: View {

    @State var pushView = false

    var body: some View {
        NavigationView {

            List {
                HStack{
                    Text("test")
                    Spacer()
                    NavigationLink(destination: NewView(), isActive: $pushView) {
                        Text("")
                    }.hidden()
                        .navigationBarTitle(self.pushView ? "New view" : "default view")
                    Text("See More")
                        .padding(.trailing)
                        .foregroundColor(Color.blue)
                        .onTapGesture {
                            self.pushView.toggle()
                    }
                }
            }
        }
    }
}

struct NewView: View {

    var body: some View {
        Text("New View")
    }
}

ContentView изображение

NewView изображение

Чтобы нажать на кнопку и перейти к следующему экрану, вы можете использовать NavigationLink, как показано ниже.

NavigationView{
       NavigationLink(destination: SecondView()) {
             Text("Login")
              .padding(.all, 5)
              .frame(minWidth: 0, maxWidth: .infinity,maxHeight: 45, alignment: .center)
              .foregroundColor(Color.white)
       }
 }

Вы можете использовать NavigationLink реализовать это:

struct DetailsView: View {
    var body: some View {
        VStack {
            Text("Hello world")
        }
    }
}

struct ContentView: View {
    @State var selection: Int? = nil
    var body: some View {
        NavigationView {
            VStack {
                NavigationLink(destination: DetailsView(), tag: 1, selection: $selection) {
                    Button("Press me") {
                        self.selection = 1
                    }
                }
            }
        }
    }
}

Вам нужно использовать navigationBarBackButtonHidden установив значение true в пункте назначения. Вот так:

struct ContentView: View {
    var body: some View {
        NavigationView {
            NavigationButton(destination: DetailView()) {
                Text("Click Me")
            }.navigationBarTitle(Text("Header"))             }
    }
}
struct DetailView: View {
    var body: some View {
        Text("Detail View")
        .navigationBarBackButtonHidden(true) //This will hide your back arrow button

    }
}
Другие вопросы по тегам