這是 Login() 視圖:
struct Login: View {
@Environment(\.presentationMode) var presentationMode
var body: some View{
VStack{
HStack{
Button(action: {
presentationMode.wrappedValue.dismiss()
}) {
Image(systemName: "xmark")
.resizable()
.frame(width: 18, height: 18)
}
}
NavigationLink(destination: CreateAccount().navigationBarBackButtonHidden(true), label: {
Text("create account")
// and close the current view Login()
})
}
}
}
是否可以打開一個新視圖,在這種情況下 CreateAccount() 并關閉當前視圖 Login()?
uj5u.com熱心網友回復:
為了做到這一點,我建議NavigationView完全跳過,請參閱此處了解更多資訊。你的情況的一個例子:
//You need an `ObservedObject` to do this, and a overall holder view
enum ViewStates{
//Declare possible views
case ContentView
case Login
case CreateAccount
}
//Then use an observableObject
class viewControl: ObservableObject{
@Published var currentView: ViewStates = .ContentView
}
//Finally, pass this into your views. Take a look at the second part of the tutorial I posted below for more info
//such as using `EnvironmentObject` and adding animation. Example implimentation below:
struct ControllerView: View{
@StateObject var controller: viewControl
var body: some View{
switch controller.currentView{
case .ContentView:
ContentView(controller: controller)
case .Login:
Login(controller: controller)
case .CreateAccount:
CreateAccount(controller: controller)
}
}
}
接下來,你需要擁有你@ObservedObject var controller: viewControl所有的觀點。請注意,您不需要在 switch 子句中使用 default 陳述句,因為它enum宣告了所有可能的值。下面是一個示例 CreateAccount 視圖。您也不再需要解雇 - 事實上,這將不再有效。
struct CreateAccount: View{
@ObservedObject var controller: viewControl
var body: some View{
//Content
Button("Dismiss"){
controller.currentView = .ContentView
}
}
}
這將允許您通過單擊來切換視圖。而不是 ContentView 中的 NavigationLink,請執行以下操作:
Button{
controller.currentView = .CreateAccount
} label: {
Text("Create Account")
}
要回傳,您只需再次設定該值。這也可以擴展以顯示更多視圖。
教程的第二部分
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/488496.html
標籤:IOS 迅捷 swiftui-导航链接 swiftui-导航视图
