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")
}
}
Чтобы нажать на кнопку и перейти к следующему экрану, вы можете использовать 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
}
}