根据 SwiftUI 中的切换值更改文本

Posted

技术标签:

【中文标题】根据 SwiftUI 中的切换值更改文本【英文标题】:Change text based on toggle values in SwiftUI 【发布时间】:2019-07-02 04:34:51 【问题描述】:

我在 SwiftUI 中创建了一个带有文本、图像和导航按钮的视图。按下导航按钮时,它将导航到另一个包含 Toggle 的视图。当我更改 Toggle Value 时,我还想更改 Text 中的值以前的视图。

更改切换时值会更新,但在以前的视图中访问时未反映。

//BluetoothView.swift

struct BluetoothView: View 
    @ObjectBinding var bluetooth = Settings()

    var body: some View 
        return NavigationButton(destination: ToggleBluetoothView()) 
            HStack() 
                Image("default")
                    .resizable()
                    .cornerRadius(12)
                    .frame(width: 25, height: 25)
                    .clipped()
                    .aspectRatio(contentMode: .fit)
                Text("Bluetooth")
                    .color(.blue)
                    .font(.system(size: 18))
                Text(bluetooth.isBluetoothOn ? "On" : "Off")
                    .color(.gray)
                    .font(.subheadline)
                    .frame(width: 50, height: 40, alignment: .trailing)
            
        
    

//ToggleBluetoothView.swift

struct ToggleBluetoothView: View 
    @ObjectBinding var bluetooth = Settings()

    var body: some View 
        Form 
            Section(header: Text("ENABLE TO CONNECT WITH NEARBY DEVICES")) 
                Toggle(isOn: $bluetooth.isBluetoothOn) 
                    Text("Bluetooth")
                    
                
            
        
    

//Settings.swift

class Settings: BindableObject 

        var didChange = PassthroughSubject<Void, Never>()

       var isBluetoothOn = false  didSet  update()  

        func update() 
            didChange.send(())
        
    

【问题讨论】:

【参考方案1】:

您在每个视图中分别实例化设置。两个视图都需要看到相同的设置对象:

更改以下内容:

NavigationButton(destination: ToggleBluetoothView(bluetooth: bluetooth))  ... 

并移除 ToggleBluetoothView 中的初始值:

struct ToggleBluetoothView: View 
    @ObjectBinding var bluetooth: Settings

    var body: some View 
        Form 
            Section(header: Text("ENABLE TO CONNECT WITH NEARBY DEVICES")) 
                Toggle(isOn: $bluetooth.isBluetoothOn) 
                    Text("Bluetooth")
                
            
        
    

【讨论】:

不客气。如果您要在多个视图中传递 @BindableObject,则可以考虑使用 @EnvironmentObject。检查 WWDC 会话 226(通过 SwiftUI 的数据流)。

以上是关于根据 SwiftUI 中的切换值更改文本的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 表单中的文本在更改后不换行

如何根据布尔值 (SwiftUI) 更改对象的绑定源?

更改 SwiftUI 文本 .timer 格式

根据计算的值 [Swift] 使用滑块更改 TextField 中的值

当我们在文本和图像之间切换按钮内容时,如何停止 SwiftUI 更改固定填充?

SwiftUI 在视图之间切换