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

SwiftUI如何实现点击按钮跳转视图 点击connexionBtnView跳转AdminView/UserView

SwiftUI 点击按钮按条件跳转指定视图实现方案

实现思路

使用SwiftUI的编程式导航能力,点击按钮时先完成登录校验、判断用户角色,再根据角色触发对应页面的跳转,无需编写多个硬编码的NavigationLink。

iOS 16+ 推荐实现(使用NavigationStack)

第一步:添加需要的状态变量

在ConnexionView中新增两个状态属性:

// 控制导航是否触发
@State private var jumpToTargetView = false
// 存储登录后用户角色,true为管理员,false为普通用户
@State private var isAdminUser = false

第二步:替换NavigationView为NavigationStack,添加导航目标绑定

把原来的NavigationView替换成NavigationStack,并添加navigationDestination修饰符绑定跳转目标:

NavigationStack {
    // 原有ZStack内容不变
    ZStack{
        Image("background")
            .ignoresSafeArea()
        // 原有VStack内容不变
        VStack (spacing: 15){
            // 所有原有子视图保持不变
            Spacer()
            logoView
            Spacer()
            titleView
            loginIdView
            loginPwdView
            connexionBtnView 
            Spacer()
            NavigationLink {
                LostPwdView()
            } label: {
                lostPwd
            }
            Spacer()
        }.frame(maxHeight: .infinity)
            .padding(.bottom,keyboardHander.keyboardHeight)
            .animation(.default)
    }
    // 新增:绑定跳转目标
    .navigationDestination(isPresented: $jumpToTargetView) {
        if isAdminUser {
            AdminView()
        } else {
            UserView()
        }
    }
}

第三步:给connexionBtnView添加点击逻辑

给connexionBtnView添加onTapGesture或者按钮的action事件,处理登录校验和角色判断:

// 假设connexionBtnView为Button类型,直接在action中编写逻辑即可
var connexionBtnView: some View {
    Button("登录") {
        // 此处编写登录校验逻辑,可对接接口或本地判断账号密码
        // 示例:如果账号为admin则判定为管理员
        if loginId == "admin" && pwd == "admin123" {
            isAdminUser = true
        } else {
            isAdminUser = false
        }
        // 触发导航跳转
        jumpToTargetView = true
    }
}

兼容iOS 15及更早版本实现

如果需要支持旧版本,用NavigationView+带isActive绑定的NavigationLink实现,把导航链接放在VStack最下方即可:

NavigationView {
    ZStack{
        Image("background")
            .ignoresSafeArea()
        VStack (spacing: 15){
            // 原有所有子视图保持不变
            Spacer()
            logoView
            Spacer()
            titleView
            loginIdView
            loginPwdView
            connexionBtnView 
            Spacer()
            NavigationLink {
                LostPwdView()
            } label: {
                lostPwd
            }
            // 新增:隐藏的条件跳转NavigationLink
            NavigationLink(isActive: $jumpToTargetView) {
                if isAdminUser {
                    AdminView()
                } else {
                    UserView()
                }
            } label: {
                EmptyView()
            }
            Spacer()
        }.frame(maxHeight: .infinity)
            .padding(.bottom,keyboardHander.keyboardHeight)
            .animation(.default)
    }
}

点击逻辑和iOS16+版本完全一致,无需改动。


内容的提问来源于stack exchange,提问作者liams62217

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:06:09