如何使用一个按钮一次显示一个 VStack 中 2 个结构的内容?

Posted

技术标签:

【中文标题】如何使用一个按钮一次显示一个 VStack 中 2 个结构的内容?【英文标题】:How to show contents of 2 structures in a VStack one at a time using one button? 【发布时间】:2020-12-07 18:07:19 【问题描述】:

我试图在不同时间显示一个结构 PersonalSchedule 和另一个结构 EveryoneSchedule,同时使用 1 个按钮。以前,我有一个菜单,但如果只有 2 个选项,我发现菜单毫无意义,我想我可以制作一个按钮来完成它并来回切换。格式和一切都在那里,但连接不上,我做错了什么?

import SwiftUI

struct Schedule: View 
    
    @State var isPresentedSideMenu = false
    @State var width = UIScreen.main.bounds.width
    
    init() 
        UITabBar.appearance().isHidden = true
    
    
    
    @ State var scheduleType = "pschedule"


    
    var body: some View 
                
        ZStack 
            Color("Background")
                .edgesIgnoringSafeArea(.all)
            
            VStack(alignment: .leading) 
                
                
                VStack(alignment: .leading) 
                    
                    HStack(spacing: 80) 
                    Text("Schedule")
                        .font(.largeTitle)
                        .foregroundColor(.labelColor)
                        
                        Button(action: self.scheduleType = "pschedule", label: 
                            Text("Schedule Types")
                                .foregroundColor(.labelColor)
                        )
                        .padding(.vertical, 10)
                        .padding(.horizontal)
                        .background(Color.newSecondaryColor)
                        .clipShape(Capsule())
                        .frame(width: 160, height: 20, alignment: .trailing)
                        .shadow(radius: 7)
                        
                    
                    
                    Text("View your schedule, make shift changes, and view everyone else's schedule. So you always know who you're working with.")
                        .font(.body)
                        .foregroundColor(.labelColor)
                
                
        
            VStack(alignment: .leading) 
            if self.scheduleType == "pschedule" 
                PersonalSchedule()
             else 
                EveryoneSchedule()
            
            
        
            .padding(.all, 10)
    

【问题讨论】:

【参考方案1】:

如果只是if/else,那么把它变成布尔值就更简单了,比如

struct Schedule: View 
    
    @State var isPresentedSideMenu = false
    @State var width = UIScreen.main.bounds.width
    
    init() 
        UITabBar.appearance().isHidden = true
    
    
    @State var isPersonSchedule = true         // << here !!
    
    var body: some View 
        
        ZStack 
            Color("Background")
                .edgesIgnoringSafeArea(.all)
            
            VStack(alignment: .leading) 
                VStack(alignment: .leading) 
                    
                    HStack(spacing: 80) 
                        Text("Schedule")
                            .font(.largeTitle)
                            .foregroundColor(.labelColor)
                        
                        Button(action: 
                              self.isPersonSchedule.toggle()      // << here !!
                        , label: 
                            Text("Schedule Types")
                                .foregroundColor(.labelColor)
                        )
                        .padding(.vertical, 10)
                        .padding(.horizontal)
                        .background(Color.newSecondaryColor)
                        .clipShape(Capsule())
                        .frame(width: 160, height: 20, alignment: .trailing)
                        .shadow(radius: 7)
                    
                    
                    
                    Text("View your schedule, make shift changes, and view everyone else's schedule. So you always know who you're working with.")
                        .font(.body)
                        .foregroundColor(.labelColor)
                
                
                
                VStack(alignment: .leading) 
                    if self.isPersonSchedule       // << here !!
                        PersonalSchedule()
                     else 
                        EveryoneSchedule()
                    
                
                
            .padding(.all, 10)
        
    

【讨论】:

非常感谢!我什至没有考虑布尔值!

以上是关于如何使用一个按钮一次显示一个 VStack 中 2 个结构的内容?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SwiftUI 在 VStack 中显示我的 AVPlayer

VStack 按钮中的图像和按钮标题

Swiftui 将 VStack 子项高度调整为内容高度

如何在 Swiftui 中与其他组件一起在 ScrollView 或 VStack 中完全显示 Picker?

如何在 SwiftUI 中动态调整可垂直滚动的 VStack 中的一行中的项目数?

修复与主视图相关的 VStack,即使页面滚动,它也保持在同一个位置