SwiftUI List - Редактировать строку - PullRequest
0 голосов
/ 12 апреля 2020

Есть ли способ стилизовать всю строку в списке в режиме редактирования? то есть границы вокруг всего текста, удалить и перетащить значок. Как насчет изменения значков удаления и перетаскивания?

                   List {
                        ForEach(options, id: \.self) { option in
                            HStack {

                                Text(option)
                                .font(.custom("Random", size: 18))
                                .foregroundColor(Color.init(hex: "#000000"))
                                .lineLimit(nil)
                                .padding(.leading, 10)


                                Spacer()
                            }
                            .cornerRadius(10)
                            .border(Color.black)
                            .padding()
                        }
                        .onMove(perform: move)
                        .onDelete(perform: delete)


                    }
                    .environment(\.editMode, $editMode)

enter image description here

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Вы можете создать границу, используя два прямоугольника, сложенных друг на друга. Чтобы убедиться, что граница находится под другой информацией, обязательно поместите ее перед остальным содержимым вашей ячейки, все в ZStack. Two Rectangle() border Представьте, что первый ZStack - это Cell. Кроме того, вы хотите использовать maxWidth и maxHeight для первого прямоугольника, чтобы убедиться, что он заполняет всю ячейку, а затем вам нужно будет использовать считыватель геометрии, чтобы определить высоту и ширину ячейки, чтобы правильно установить ширина и высота второго прямоугольника. Удачи! Примечание: я не знаю, как это будет работать вместе с ячейкой по умолчанию. Это решение основано на пользовательской ячейке.

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

Вы можете найти некоторое преимущество, используя ViewModifiers, см. https://sarunw.com/posts/swiftui-viewmodifier/

Модификатор представления позволит вам легко просто передать переменную editMode в один модификатор, который изменяет ваш вид строки в список с тем, что вы настраиваете в качестве параметров в модификаторе представления.

Пример:

struct SomeView: View {
@Environment(\.editMode) var editMode
let options = ["1", "2", "3"]
var body: some View {

    List {
         ForEach(options, id: \.self) { option in
            RowView(string: option)
                .modifier(CustomModifier(self.editMode))
         }
     }//.environment(\.editMode, $editMode)
    .navigationBarItems(trailing: EditButton())
}

struct CustomModifier: ViewModifier {
    init(_ editMode: Binding<EditMode>?) {
        self.editing = editMode?.wrappedValue.isEditing ?? false
    }

    var editing: Bool
    func body(content: Content) -> some View {
        return content
            .foregroundColor(editing ? .red : .green)
            .onTapGesture {
                print("I'm a \(self.editing ? "red" : "green") thing")
        }
    }
}

}

struct RowView: Просмотр {let string: String

var body: some View {
    Text(string)
}

}

Что касается изменения значков удаления и перемещения, я не знаком с этим. Я не смог с готовностью найти решение, погуглившее это, либо извините.

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