SwiftUI - 不改变视图

Posted

技术标签:

【中文标题】SwiftUI - 不改变视图【英文标题】:SwiftUI - Not changing views 【发布时间】:2021-02-07 19:37:22 【问题描述】:

我有一个表单,如果 Bool 为假,我想更改视图:

var body: some View 
    NavigationView 
        Form 
            Section 
                Toggle(isOn: $ClientAnswer) 
                    Text("Client answer")
                
                
                if ClientAnswer 
                    Toggle(isOn: $submission.fieldOne ) 
                        Text("Field One")
                    
                    Toggle(isOn: $submission.fieldTwo ) 
                        Text("Field Two")
                    
                
            
            
            Section 
                Button(action: 
                    if self.ClientAnswer
                        self.placeSubmission()
                    
                    else 
                        ShowRS() //**change views here.**
                        print("test")
                    
                )
                    Text("Submit")
                
            .disabled(!submission.isValid)
        
    

代码正在执行,print("test") 工作正常,但它不会改变视图它只是保持在同一个视图上?

我试图切换到的视图是:

struct ShowRS: View 
    var body: some View 
        Image("testImage")
    

【问题讨论】:

你想用ShowRS替换哪个视图? 【参考方案1】:

您必须将ShowRS 包含在您的视图层次结构中——现在,它只是在您的Buttons 操作回调中。有多种方法可以实现这一点,但这里有一种选择:

struct ContentView : View 
    @State private var moveToShowRSView = false
    
    var body: some View 
        NavigationView 
            Button(action: 
                if true 
                    moveToShowRSView = true
                
            ) 
                Text("Move")
            .overlay(NavigationLink(destination: ShowRS(), isActive: $moveToShowRSView, label: 
                EmptyView()
            ))
        
        
    



struct ShowRS: View 
    var body: some View 
        Image("testImage")
    

我已经从您的示例中简化了这一点,因为我没有您的所有代码与您的模型等,但它演示了这个概念。在Button 操作中,您测试一个布尔值(在这种情况下,它将始终返回true),然后设置@State 变量moveToShowRSView

如果moveToShowRSView 为真,则Button 上有一个overlay,它有一个NavigationLink(因为EmptyView 是不可见的),只有当moveToShowRSViewtrue 时它才会处于活动状态

【讨论】:

谢谢,一件事,不管isActive是真还是假,视图似乎都显示出来了? 你指的是什么观点? ShowRS()overlay上的视图 嗯 - 我正在运行我提供的代码,并且 ShowRS() 只有在您单击按钮后才会出现。您是在运行我的代码还是尝试将其翻译到您的应用程序中并且您在那里看到了它?如果是这样,您可以发布更新后的代码吗?

以上是关于SwiftUI - 不改变视图的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI:在数组中更新值后视图没有改变

SwiftUI中状态改变未导致视图正确刷新的原因及解决

SwiftUI中状态改变未导致视图正确刷新的原因及解决

SwiftUI - 更新@State 不会改变视图

在 SwiftUI 中使用 google 帐户登录后是不是有任何改变视图的方法?

SwiftUI 如何快速识别视图(View)界面的刷新是由哪个状态的改变导致的?