繁体   English   中英

按下时如何为 swiftUI 按钮提供多种功能?

[英]How can I give a swiftUI button multiple functions when pressed?

我创建了一个页面供用户注册新帐户。 我创建了一个“继续”按钮,旨在将新数据推送到 firebase 并同时将用户移动到下一个视图,即我的 mapView()。 现在注册功能正在运行,但我不知道如何实现 mapView()

                        Button(action:{
                            guard !email.isEmpty, !password.isEmpty else {
                                return
                            }
                            
                            viewModel.signUp(email: email, password: password)

                        } , label: {
                            Text("Continue")
                                .foregroundColor(.white)
                                .frame(width: 350, height: 35)
                                .background(Color.blue)
                                .cornerRadius(20)
                        })
        }

我尝试在函数内部添加地图视图,但 Xcode 返回一条警告,指出“'mapView' 初始值设定项的结果未使用”。

    Button(action:{
                            guard !email.isEmpty, !password.isEmpty else {
                                return
                            }
                            
                            viewModel.signUp(email: email, password: password)
                            mapView()
                        } , label: {
                            Text("Continue")
                                .foregroundColor(.white)
                                .frame(width: 350, height: 35)
                                .background(Color.blue)
                                .cornerRadius(20)
                        })

有几种方法可以实现这一点,但使用NavigationStack效果非常好。 像这样:

//
//  ContentView.swift
//  animation-example
//
//  Created by Andrew Carter on 12/15/22.
//

import SwiftUI

enum SignUpFlow {
    case name
    case age
    case welcome
}

struct SignUpInfo {
    var name: String
    var age: String
}

struct NameView: View {
    @Binding var name: String
    
    var body: some View {
        VStack {
            TextField("Name", text: $name)
            
            NavigationLink("Next", value: SignUpFlow.age)
                .disabled(name.isEmpty)
        }
    }
    
}

struct AgeView: View {
    @Binding var age: String
    
    var body: some View {
        VStack {
            TextField("Age", text: $age)
            
            NavigationLink("Next", value: SignUpFlow.welcome)
                .disabled(age.isEmpty)
        }
    }
    
}

struct WelcomeView: View {
    var body: some View {
        Text("Welcome")
    }
}

struct ContentView: View {
    
    @State private var path: [SignUpFlow] = []
    @State private var signUpInfo = SignUpInfo(name: "", age: "")

    var body: some View {
        NavigationStack(path: $path) {
            NavigationLink("Create Account", value: SignUpFlow.name)
                .navigationDestination(for: SignUpFlow.self) { flow in
                    switch flow {
                    case .age:
                        AgeView(age: $signUpInfo.age)
                        
                    case .name:
                        NameView(name: $signUpInfo.name)

                    case .welcome:
                        WelcomeView()
                    }
                }
        }
    }
    
}

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

在上面的示例中, mapView()只是放置在按钮操作中,它未被使用,因为它未被使用。 Button闭包需要一个Void返回,你只是在创建一个地图视图而不是立即将它扔掉——它没有以任何方式使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM