我正在创建一个编辑帐户信息导航从我的应用程序的主要视图之一,但当我推动第3或第4视图到堆栈,该视图立即被驳回?
有时,子B将留在堆栈中,有时它不会,但是Child C视图总是会立即被取消,并且这些视图中没有代码会导致这种行为.?
下面是导航堆栈图。
(auto dismissed) (auto dismissed)
Parent CHILD A CHILD B CHILD C
ProfileView -> SettingsMenu. ->. Account -> EditEmail
我遇到的问题是,我浏览到的任何来自“B”的视图都是,立即取消了,因此用户无法编辑他们的电子邮件、电话号码或性别。
我不知道出了什么问题,因为我在每个视图中将所有isActive属性存储为@State变量,以便以编程方式导航到相应的视图?
有什么不对吗??
概况(父母)
struct ProfileView: View {
@EnvironmentObject var session: SessionStore
@StateObject var profileVM = ProfileViewModel()
@State private var presentSettings: Bool = false
var body: some View {
NavigationView {
List {
//other content
Text("Show settings menu").onTapGesture { presentSettings = true }
}
.listStyle(PlainListStyle())
.navigationViewStyle(StackNavigationViewStyle())
.background (
NavigationLink("", destination: Settings(), isActive: $presentSettings)
)
}
}
}
从父级激活的导航视图
struct Settings: View {
@EnvironmentObject var session: SessionStore
@Environment(\.presentationMode) var presentation
@State private var presentAccount: Bool = false
@State private var presentSecurity: Bool = false
@State private var presentNotification: Bool = false
var body: some View {
VStack(spacing: 30) {
AccountMenuTab()
.onTapGesture { presentAccount = true }
SecurityMenuTab()
.onTapGesture { presentSecurity = true }
NotificationTab()
.onTapGesture { presentNotification = true }
}
// THESE VIEWS GET IMMEDIATELY DISMISSED ON NAVIGATION
.background ( NavigationLink("", destination: AccountTab(), isActive: $presentAccount))
.background ( NavigationLink("", destination: SecuritySettings(), isActive: $presentSecurity))
.background ( NavigationLink("", destination: UserNotificationsView(), isActive: $presentNotification))
}
}
儿童B导航激活从儿童A,任何导航到另一个视图(编辑电子邮件,电话,或性别)立即被驳回?
struct AccountTab: View {
@EnvironmentObject var session : SessionStore
@StateObject var accountVM = AccountTabViewModel()
@State private var editEmail: Bool = false
@State private var editPhone: Bool = false
@State private var editGender: Bool = false
var body: some View {
VStack {
Text("Email").onTapGesture { editEmail.toggle() }
Text("Phone").onTapGesture { editPhone.toggle() }
Text("Gender").onTapGesture { editGender.toggle() }
}
// BELOW VIEWS GET IMMEDIATELY DISMISSED AFTER NAVIGATION??
.background ( NavigationLink("", destination: EditEmail(), isActive: $editEmail) )
.background( NavigationLink("", destination: EditGender(), isActive: $editGender) )
.background( NavigationLink("", destination: EditPhone(), isActive: $editPhone) )
}
}
发布于 2022-02-20 12:38:15
不需要.onTapGesture
或.background
..。
它应该是这样的:
struct ProfileView: View {
var body: some View {
NavigationView {
List {
Text("other content ...")
//other content {
NavigationLink("Show settings menu") {
Settings()
}
}
.listStyle(PlainListStyle())
.navigationViewStyle(StackNavigationViewStyle())
}
}
}
struct Settings: View {
var body: some View {
VStack(spacing: 30) {
NavigationLink("Account Menu") {
AccountTab()
}
NavigationLink("Security Menu") {
// SecuritySettings()
}
NavigationLink("Notification Menu") {
// UserNotificationsView()
}
}
}
}
struct AccountTab: View {
var body: some View {
VStack {
NavigationLink("Email") {
// EditEmail()
Text("Edit Mail")
}
NavigationLink("Phone") {
// EditGender()
Text("Edit Phone")
}
NavigationLink("Gender") {
// EditPhone()
Text("Edit Gender")
}
}
}
}
https://stackoverflow.com/questions/71197456
复制相似问题