簡體   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