Передача данных из перечисления на лист, запускаемая внутри цикла ForEach - PullRequest
0 голосов
/ 22 апреля 2020

В моем VStack есть ForEach l oop, так что для каждого элемента моего перечисления создается новая "ячейка". Это работает просто отлично. Я могу передать название и номер для каждой ячейки, но в каждой ячейке есть кнопка, которая переключает вид листа. Каждый лист должен содержать соответствующий текст в виде прокрутки. Поэтому текст также приводится в перечислении.

Проблема: Но когда я пытаюсь передать этот infoText через element.infoText для каждого листа, будет представлен infoText первого элемента в перечислении.

ForEach l oop:

struct ListView: View{

@State var infoSheetIsPresented: Bool = false

var body: some View{

    VStack {
        ForEach(WelcomeCardViewContent.allCases, id: \.self) {
        element in
            HStack {

                Text(element.text)

                Button(action: {
                        self.infoSheetIsPresented.toggle()
                    }) {
                        Image(systemName: "info.circle")
                    }
                    .sheet(isPresented: self.$infoSheetIsPresented) {
                        Text(element.infoText)
                    }
            }
        }
    }
}
}

А вот мое перечисление. Конечно, есть и InfoSheetView, но, как я уже сказал, это просто представление с прокруткой текста. Текст передается с простой «текстовой» константой. Для простоты я заменил отдельный вид листа на простой текстовый вид -> та же проблема.

enum WelcomeCardViewContent: String, CaseIterable{

case personalData
case bodyParameters

var text: String {
    switch self{
    case .personalData:
        return "Personal Data"
    case .bodyParameters:
        return "Body Parameters"
    }
}

var infoText: String {
    switch self{
    case .personalData:
        return "1 Lorem ipsum dolor.."
    case .bodyParameters:
        return "2 Lorem ipsum dolor sit amet."
    }
}
}

Спасибо за ваш совет ^^.

1 Ответ

0 голосов
/ 22 апреля 2020

Поскольку вы теряли трек текущей карты, я исправил это, сохранив карту, которая будет показана. Теперь текст отображается правильно.

Вот исправленная версия:

struct ListView: View {

    @State private var infoSheetIsPresented: Bool = false
    @State private var showingCard: WelcomeCardViewContent = .personalData

    var body: some View {
        ForEach(WelcomeCardViewContent.allCases, id: \.self) { element in
            HStack {
                Text(element.text)

                Button(action: {
                    self.showingCard = element
                    self.infoSheetIsPresented.toggle()
                }) {
                    Image(systemName: "info.circle")
                }
                .sheet(isPresented: self.$infoSheetIsPresented) {
                    Text(self.showingCard.infoText)
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...