Как обновить текстовую метку в SwiftUI? - PullRequest
2 голосов
/ 18 марта 2020

У меня есть текстовая метка SwiftUI, и я хочу что-то написать в ней после нажатия кнопки.

Вот мой код:

Button(action: {
                registerRequest() // here is where the variable message changes its value
            }) {
                Text("SignUp")
            }
            Text(message) // this is the label that I want to change

Как мне это сделать?

1 Ответ

0 голосов
/ 18 марта 2020

Имея только тот код, которым вы поделились, трудно сказать, как именно вы должны это сделать, но вот пара хороших способов:

Первый способ - поместить строку в @State переменная, так что она может быть видоизменена, и любое изменение в ней приведет к обновлению представления. Вот пример, который вы можете протестировать с помощью Live Previews:

import SwiftUI

struct UpdateTextView: View {
    @State var textToUpdate = "Update me!"
    var body: some View {
        VStack {
            Button(action: {
                self.textToUpdate = "I've been udpated!"
            }) {
                Text("SignUp")
            }
            Text(textToUpdate)
        }
    }
}

struct UpdateTextView_Previews: PreviewProvider {
    static var previews: some View {
        UpdateTextView()
    }
}

Если ваша строка хранится в классе, внешнем по отношению к представлению, вы можете использовать реализацию протокола ObservableObject в вашем классе и сделайте строковую переменную @Published, чтобы любое изменение в нем вызывало обновление представления. В представлении вам нужно сделать переменную класса @ObservedObject до fini sh, подключив все это. Вот пример, с которым вы можете играть в Live Previews:

import SwiftUI

class ExternalModel: ObservableObject {
    @Published var textToUpdate: String = "Update me!"
    func registerRequest() {
        // other functionality
        textToUpdate = "I've been updated!"
    }
}

struct UpdateTextViewExternal: View {
    @ObservedObject var viewModel: ExternalModel
    var body: some View {
        VStack {
            Button(action: {
                self.viewModel.registerRequest()
            }) {
                Text("SignUp")
            }
            Text(self.viewModel.textToUpdate)
        }
    }
}

struct UpdateTextViewExternal_Previews: PreviewProvider {
    static var previews: some View {
        UpdateTextViewExternal(viewModel: ExternalModel())
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...