Изменить текст на основе значений переключателей в SwiftUI - PullRequest
0 голосов
/ 02 июля 2019

Я создал вид с текстом, изображением и кнопкой навигации в SwiftUI. Когда нажата кнопка навигации, она переместится к другому представлению, содержащему Toggle. Когда я изменяю значение Toggle, я также хочу изменить значение 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 Ответ

0 голосов
/ 02 июля 2019

Вы настраиваете параметры отдельно в каждом представлении. Оба вида должны видеть один и тот же объект настроек:

Изменить следующее:

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")
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...