swift - SWIFTUI 按钮登录验证并转到新视图
问题描述
输入电子邮件和密码后,我需要简单的验证文本字段,下一步按钮,检查电子邮件和密码,然后转到下一个视图。怎么弄的?我有一些代码状态变量和按钮:
struct ContentView: View {
@State var email = "1"
@State var password = "1"
Button(action: {
if self.email == "1" && self.password == "1"{
print("Button tapped")
NextMyView()
}else {
print("error")
}
}) {
Image(systemName: "heart.fill")
.foregroundColor(.red)
}
但是我的想法不起作用,我如何进行此验证并在按钮后转到下一个视图。
解决方案
您将需要NavigationView
和 aNavigationLink
来实现您正在寻找的东西。
NavigationView
将所有内部视图包装在导航控制器中,NavigationLink
就像一个触发导航的特殊按钮。
例子:
struct ContentView: View {
@State private var email: String = "root"
@State private var password: String = "toor"
@State private var isLoginValid: Bool = false
@State private var shouldShowLoginAlert: Bool = false
var body: some View {
NavigationView {
VStack(alignment: .center) {
TextField("email", text: self.$email)
TextField("password", text: self.$password)
NavigationLink(destination: Text("Success"),
isActive: self.$isLoginValid) {
/*
Here we put the content view of `NavigationLink`.
It could be any `View` even `Button` but in this
example we use a `Text` with `onTapGesture`.
*/
Text("Login")
.onTapGesture {
//determine login validity
let isLoginValid = self.email == "root" && self.password == "toor"
//trigger logic
if isLoginValid {
self.isLoginValid = true //trigger NavigationLink
}
else {
self.shouldShowLoginAlert = true //trigger Alert
}
}
}
}
.navigationBarTitle("Login Screen")
.alert(isPresented: $shouldShowLoginAlert) {
Alert(title: Text("Email/Password incorrect"))
}
}
}
}
NavigationLink
定义:
destination
导航到一个简单的Text
视图- 在您的情况下,您应该将其更改为
NextMyView()
- 在您的情况下,您应该将其更改为
isActive
绑定到一个布尔值loginSuccess
,当更新为true
应重新渲染视图并导致NavigationLink
自动触发- 内容视图很简单
Text
,onTapGesture
我们可以在其中实现成功/失败案例处理。- 在您的情况下,您可以更改
Text
为Image(systemName: "heart.fill")
- 在您的情况下,您可以更改
PS:作为额外的,我包含了触发和显示登录失败警报的逻辑。
希望能帮助到你 :)
推荐阅读
- java - HotSpot JVM的GC在什么情况下会将内存释放回OS?
- java - Hibernate DAO 无法使用带有 Spring Boot 和 thymeleaf 的下拉列表保存外键,我不想使用 jpa
- laravel - Laravel:从多个表中提取数据
- javascript - 使用键列表创建对象
- android - 在第一个 viewType 上收到 DiffUtil 有效负载数据,但我需要第二个 Viewtype
- ios - 反应原生 ios 创建可操作的通知
- amazon-web-services - AWS Eventbridge:捕获所有事件的模式
- python - Matplotlib 视图限制最小值小于 1,具有 2 个不同的比例图
- java - 邮寄图像视图而不将其保存在java中
- c# - VS 2019 中 Windows 安装程序的替代解决方案是什么?