Swiftui 按钮动作功能

Posted

技术标签:

【中文标题】Swiftui 按钮动作功能【英文标题】:Swift UI button action function 【发布时间】:2021-01-10 20:51:28 【问题描述】:

我对 Swift 完全陌生,所以请原谅可能缺乏精确性。我正在尝试构建一个使用 REST API 进行身份验证的登录表单。 这是我到目前为止遵循this 教程的内容。 我的下一步是了解将提交表单的所有逻辑放在哪里。我想从它所采用的内联方式中提取它。

我可以将函数传递给 action 参数吗?我尝试在 Xcode 上找到某种提取功能,但无法使用(它们是灰色的)。

import SwiftUI

let lightGreyColor = Color(red: 239.0/255.0, green: 243.0/255.0, blue: 244.0/255.0, opacity: 1.0)
let storedUsername = "john"
let storedPassword = "1234"

struct ContentView: View 
    @State var username: String = ""
    @State var password: String = ""
    @State var authenticationDidFail: Bool = false
    @State var authenticationDidSucceed: Bool = false
    
    
    var body: some View 
        ZStack 
            VStack 
                Image("logo")
                
                EmailField(username: $username)
                PasswordField(password: $password)
                if authenticationDidFail 
                    Text("Information not correct. Try again.")
                        .offset(y: -10)
                        .foregroundColor(.red)
                
                Button(action: 
                    if  self.password == storedPassword 
                        print(password)
                        self.authenticationDidSucceed = true
                        self.authenticationDidFail = false
                     else 
                        self.authenticationDidFail = true
                    
                ) 
                    LoginButtonContent()
                
                
                
            
            if authenticationDidSucceed 
                Text("Login succeeded!")
            
        
        
    


struct ContentView_Previews: PreviewProvider 
    static var previews: some View 
        ContentView()
    


struct LoginButtonContent: View 
    var body: some View 
        Text("LOGIN")
            .font(.headline)
            .foregroundColor(.white)
            .padding()
            .frame(width: 220, height: 60)
            .background(Color.green)
            .cornerRadius(15.0)
    


struct PasswordField: View 
    @Binding var password: String
    
    
    var body: some View 
        SecureField("Password", text: $password)
            .padding()
            .background(lightGreyColor)
            .cornerRadius(5.0)
            .padding(.bottom, 20)
    


struct EmailField: View 
    @Binding var username: String
    
    var body: some View 
        TextField("Username", text: $username)
            .padding()
            .cornerRadius(5.0)
            .padding(.bottom, 20)
    

【问题讨论】:

【参考方案1】:

您可以在 Button 的操作中使用模型的对象,在那里您可以执行 REST 调用并返回结果以将值设置为 authenticationDidSucceed,以便更新 UI。

如果使用的类符合 ObservableObject 协议,您甚至可以使用其发布的变量来自动更新 UI。

【讨论】:

以上是关于Swiftui 按钮动作功能的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SwiftUI 在动作关闭中获取按钮本身?

在swiftui中按钮的触摸动作播放音频

SwiftUI 中具有双重动作(点击和长按)的按钮

OnLongPressGesture 释放动作 (SwiftUI)

iOS 15.3.1中SwiftUI toolbar中按钮不响应点击动作等若干不兼容问题的解决

iOS 15.3.1中SwiftUI toolbar中按钮不响应点击动作等若干不兼容问题的解决