SwiftUI Вопрос о передаче переменной в другое представление - PullRequest
0 голосов
/ 30 июня 2019

Я хочу передать переменную типа Float из одного представления в другое представление.

В приведенном ниже коде есть значение Float, называемое mhzValue, которое задается с помощью ползунка, ползунок изменяет значение, а затем текст отображается в представлении. Когда пользователь нажимает кнопку навигации для отображения нового Я хотел бы иметь возможность взять mhzValue и отобразить его в новом виде в текстовом поле, а также установить его в качестве другой переменной.

Надеюсь, что это имеет смысл.

Пожалуйста, посмотрите пример кода ниже ..

Спасибо.

Craig

import SwiftUI
struct ContentView : View {
    @State private var mhzValue : Float = 0
    var body: some View {
        // Navigation View
        NavigationView {

            VStack{
                Text("Test Value:")
                    .font(.headline)
                    .color(.blue)
                    .padding(.leading, -180.0)

                //Get Slider Value
                Slider(value: $mhzValue, from: 1, through: 55, by: 1)
                    .padding(.horizontal)
                //Display Slider Value
                Text("\(Int(mhzValue)) Value")
                    .font(.title)
                    .fontWeight(.semibold)
                    .color(.blue)
                // Naviagtion Button and send value of mhzValue to new View
                NavigationButton(destination: NextView()){
                    Image(systemName: "plus.square.fill")
                        .foregroundColor(.white)
                        .font(/*@START_MENU_TOKEN@*/.title/*@END_MENU_TOKEN@*/)
                        .frame(width: 150.0, height: 16.0)
                        .padding(15)
                        .background(Color.red)
                        .cornerRadius(10.0)
                }
            }
        }
    }
}

// New View to show Slider Value
struct NextView : View {
    var body: some View {
        Text("Display Slider Value Here:")

    }
}

#if DEBUG
struct ContentView_Previews : PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
#endif

1 Ответ

0 голосов
/ 30 июня 2019

Это легко сделать с помощью Bindings .Поскольку mhzValue помечен оболочкой свойства @State, с ним связана привязка.Поэтому вы можете объявить переменную @Binding в вашем представлении second и инициализировать ее с помощью привязки к исходной переменной.

struct NextView : View {
    @Binding var mhzValue: Float
    ...
}

Когда вы указываете NextView в качестве пункта назначения для своей кнопки навигации, передайте ему привязку к mhzValue.(Синтаксис знака доллара - это сокращенный способ ссылки на привязку.)

struct ContentView : View {
    @State private var mhzValue : Float = 0
    ...
    NavigationButton(destination: NextView(mhzValue: self.$mhzValue)){...}
    ...
}

Затем можно использовать mhzValue внутри NextView:

struct NextView : View {

    @Binding var mhzValue: Float

    var body: some View {
        VStack{
            Text("Display Slider Value Here:")
            Text("\(Int(mhzValue)) Value")
                .font(.title)
                .fontWeight(.semibold)
                .color(.blue)
        }
    }
}

Любые изменения, которые выmake в mhzValue в пределах NextView фактически будет изменен на ContentView.mhzValue.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...