You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI中输入PIN后跳转LoginView及ViewModel传递问题

解决SwiftUI中PIN验证后跳转LoginView的问题

一、在WindowGroup中注入CreatePinViewModel实例

要让整个App共享同一个ViewModel实例,直接在App的WindowGroup中初始化ViewModel,再通过environmentObject注入到环境即可,所有子视图都能访问到这个共享实例:

@main
struct DumbApp: App {
    private let createPinVM = CreatePinViewModel()
    
    var body: some Scene {
        WindowGroup {
            MainView()
                .environmentObject(createPinVM)
        }
    }
}

二、实现状态传递与页面导航

1. MainView监听ViewModel状态切换视图

在MainView里通过@EnvironmentObject获取共享的ViewModel,根据showLoginPage属性决定显示登录页还是创建账户页:

struct MainView: View {
    @EnvironmentObject var createPinVM: CreatePinViewModel
    
    var body: some View {
        if createPinVM.showLoginPage {
            SignInView() // 你的LoginView
        } else {
            CreateAccountView()
                .sheet(isPresented: $createPinVM.showConfirmPinSheet) {
                    ConfirmPinSheet()
                }
        }
    }
}

2. ConfirmPinSheet更新ViewModel状态

ConfirmPinSheet同样用@EnvironmentObject获取ViewModel,点击确认按钮时更新状态并关闭sheet:

struct ConfirmPinSheet: View {
    @EnvironmentObject var createPinVM: CreatePinViewModel
    @Environment(\.dismiss) private var dismiss
    
    var body: some View {
        VStack {
            TextField("Enter PIN", text: $createPinVM.pin)
            
            Button("Confirm Pin") {
                // 这里可添加PIN验证逻辑
                createPinVM.showLoginPage = true
                dismiss()
            }
        }
    }
}

3. CreatePinViewModel的基础定义

确保ViewModel是可观察对象,包含所需的状态属性:

class CreatePinViewModel: ObservableObject {
    @Published var pin = ""
    @Published var showConfirmPinSheet = false
    @Published var showLoginPage = false
}

关键注意点

  • 所有用到CreatePinViewModel的视图,必须声明@EnvironmentObject var createPinVM: CreatePinViewModel,否则会运行崩溃。
  • 通过environmentObject注入的ViewModel是全局共享的,ConfirmPinSheet中修改的showLoginPage会实时同步到MainView,自动触发视图切换。

内容的提问来源于stack exchange,提问作者Luka Šalipur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 16:02:29