Ios 按按钮时在视图之间交换-快捷界面
我是swift的初学者,我想在两个视图之间交换。 这是我目前的代码 我试着看其他stackoverflow问题,但我不明白什么是viewcontroller或任何东西,所以如果你回答了,请解释一下它的作用 我只想在按下注册按钮时从ContentView切换到MessageView,但我根本不知道如何实现这一点Ios 按按钮时在视图之间交换-快捷界面,ios,swift,swiftui,Ios,Swift,Swiftui,我是swift的初学者,我想在两个视图之间交换。 这是我目前的代码 我试着看其他stackoverflow问题,但我不明白什么是viewcontroller或任何东西,所以如果你回答了,请解释一下它的作用 我只想在按下注册按钮时从ContentView切换到MessageView,但我根本不知道如何实现这一点 导入快捷界面 结构ContentView:View{ @国家私有变量用户名:String=“” @国家私有变量密码:String=“” var body:一些观点{ VStack{ 文本(
导入快捷界面
结构ContentView:View{
@国家私有变量用户名:String=“”
@国家私有变量密码:String=“”
var body:一些观点{
VStack{
文本(“创建帐户”)
文本字段(“用户名”,文本:$Username)
.textFieldStyle(RoundedBorderTextFieldStyle())
.frame(宽度:250,高度:/*@START\u MENU\u TOKEN@*/100/*@END\u MENU\u TOKEN@*/)
SecureField(“密码”,文本:$Password)
.textFieldStyle(RoundedBorderTextFieldStyle())
.frame(宽度:250,高度:/*@START\u MENU\u TOKEN@*/100/*@END\u MENU\u TOKEN@*/)
让按钮=按钮(“注册!”){
如果(用户名=“”| |密码=“”){
打印(“无用户名或密码”)
}否则{
打印(“用户”,用户名)
打印(“密码”,密码)
}
}
按钮。转弯半径(5.0)
}
}
}
结构MessageView:View{
var body:一些观点{
导航视图{
名单{
文本(“FortniteGamer123”)
文本(“fortnitepickid”)
文本(“KidIsGoodAtFortnite”)
}
}.navigationTitle(“Fortnite玩家”)
}
}
结构内容视图\u预览:PreviewProvider{
静态var预览:一些视图{
ContentView()
}
}
如果有人能在视图控制器以及如何使用它们方面给我一些帮助,那就太好了。您使用的是SwiftUI,它实际上没有视图控制器(或者至少是UIViewController)的概念,而视图控制器更多的是UIKit的一部分 相反,SwiftUI是由多组可组合视图组成的。您已经定义了两个视图(如ContentView和MessageView),并且正在使用一组内置的SwiftUI视图(如TextField、Text、Button等) 要在视图之间切换,可以使用依赖于@State变量的
if
语句
我对内容进行了一些重构,使LoginView
和MessageView
由父视图(ContentView
)根据loggedIn
的状态显示。这是通过绑定
传递到LoginView的,这样当按下按钮时,该值可以被传递回父级
struct ContentView: View { //parent view
@State var loggedIn = false //state variable
var body: some View {
if loggedIn { //'if' condition
MessageView()
} else {
LoginView(loggedIn: $loggedIn) //passing loggedIn with the $ sign makes it a two-way binding where the child view can now have access to and change the variable
}
}
}
struct LoginView : View {
@Binding var loggedIn : Bool //this is how loggedIn gets passed in
@State private var username: String = ""
@State private var password: String = ""
var body: some View {
VStack {
Text("Create an account.")
TextField("Username", text: $username)
.textFieldStyle(RoundedBorderTextFieldStyle())
.frame(width: 250, height: 100)
SecureField("Password", text: $password)
.textFieldStyle(RoundedBorderTextFieldStyle())
.frame(width: 250, height: 100)
Button(action: {
if(username == "" || password == "") {
print("no suername or password")
} else {
print("user", username)
print("password", password)
loggedIn = true //set the binding to true, which will effect the parent view
}
}) {
Text("Sign Up!")
}
.padding()
.overlay(RoundedRectangle(cornerRadius: 5.0).stroke(Color.accentColor)) //using this to round the corners
}
}
}
从技术上讲,您也可以通过使用NavigationView
和NavigationLink
来实现这一点,但这会导致用户点击后退按钮返回登录屏幕的情况,而这在iOS中并不是您真正看到的情况,所以我从字面上理解了你的标题,关于在两个视图之间交换
我对您的其他代码做了一些非常小的编辑。例如,在我已经调整了的视图层次结构中,有一个<代码>让按钮= < /COD>——通常在SwiftUI,您将不会定义捕获视图的变量——相反,您只需在层次结构中定义它们。 < P>在SWIFT中,我们有两个主要的框架来构建IOS应用:UIKIT和SwiftUI。第一个是命令式的,第二个是声明式的。在UIKit中,我们使用控制器和视图类来创建UI,在SwiftUI中,我们使用视图结构来声明我们希望用户界面如何显示。在这种情况下,SwiftUI基本上类似于React/React Native和Flatter。在您的示例中,您使用的是SwiftUI,因此需要声明状态变量并基于此变量值显示视图,例如使用
.sheet(isPresented:)
或if语句。您还可以使用NavigationView和导航链接