Как отобразить список определенных строк? - PullRequest
0 голосов
/ 15 февраля 2020

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

Как мне поступить?

@State var showMyRow = false

var body: some view { 
   Vstack {
     Button(“bt”) {
          self.showMyRow.toggle()
      }
    ImageView
     ....
   List {
            ForEach
            .
            .
            . // if showMyRow is true, view show this row
    }
  }
}

enter image description here

Над изображением showMyRow имеет значение false.

enter image description here

После нажатия кнопки showMyRow имеет значение true. Если showMyRow верно, покажите мне на 7row

Ответы [ 2 ]

0 голосов
/ 15 февраля 2020

Я предполагаю, что вы пытаетесь представить несколько столбцов горизонтально на экране?

Если это так, то вы можете поместить списки в стек

HStack {
    List {
        Text("Hello")
    }
    List {
        Text("There")
    }
}

А если есть много столбцов, тогда вы можете обернуть HStack в представление прокрутки.

var body: some View {
    ScrollView(.horizontal) {
        HStack {
            List {
                Text("column 1")
            }
            List {
                Text("column 2")
            }
            List {
                Text("column 3")
            }
            List {
                Text("column 4")
            }
        }    
            .frame(width: 1000, height: 800)
            .background(Color.red)
    }
}
0 голосов
/ 15 февраля 2020

Обновленный ответ: Не уверен, что я правильно понял ваш вопрос, но если вы просто хотите получить список, из которого можно добавлять и удалять объекты, то проще всего будет создать отдельный файл SwiftUI, содержащий структуру для строки и Класс ObservableObject, который проверяет наличие любых изменений.

1) Файл SwiftUI со структурой ListItem и класс ObservableObject:

import SwiftUI

struct ListItem: Identifiable {
    let id = UUID()
    let title: String
}

class Items: ObservableObject {
    @Published var rows = [ListItem]()
}

2) ContentView с вашим представлением изображения и список:
Также имеется метод removeItems, поэтому вы можете провести любую строку, чтобы удалить ее.

struct ContentView: View {

    @ObservedObject var items = Items()

    var body: some View {
        NavigationView{
            VStack{
                Image("image")
                    .resizable()
                    .frame(width: 200, height: 200)
                    .padding(50)
                List {
                    ForEach(items.rows) { item in
                        Text(item.title)
                    }
                .onDelete(perform: removeItems)
                }
            }
        .navigationBarTitle("My List")
            .navigationBarItems(trailing: Button(action : {
                let row = ListItem(title: "New Row")
                self.items.rows.append(row)
            }) {
                Image(systemName: "plus")
            }
            )
        }
    }

    func removeItems(at offsets: IndexSet) {
        items.rows.remove(atOffsets: offsets)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
...