Как применить контекстное меню к строке таблицы SwiftUI?

0

Вопрос

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

TableRow и TableColumn наследуются от объекта value. Как я могу получить представление о строке? Я хочу установить другой контекст для каждой строки. Кроме того, я хочу задать контекст для заголовка столбца.

Как это реализовать на основе табличного компонента? Я не хочу использовать компонент списка.

struct Person: Identifiable {

let givenName: String

let familyName: String

let id = UUID()

}

@State private var people = [

Person(givenName: "Juan", familyName: "Chavez"),

Person(givenName: "Mei", familyName: "Chen"),

Person(givenName: "Tom", familyName: "Clark"),

Person(givenName: "Gita", familyName: "Kumar"),

]

@State private var sortOrder = [KeyPathComparator(\Person.givenName)]

var body: some View {

Table(people, sortOrder: $sortOrder) {

TableColumn("Given Name", value: \.givenName)

TableColumn("Family Name", value: \.familyName)

}

.onChange(of: sortOrder) {

people.sort(using: $0)

}

}
contextmenu swiftui tablecolumn tablerow
2021-11-16 23:43:33
1

Лучший ответ

0

Для того, чтобы Контекстное меню работало над таблицей SwiftUI 3.0, необходимо добавить его в каждый элемент столбца таблицы. Плюс, если вы хотите добавить Double Tap поддержку тоже нужно добавлять самостоятельно.

Table(documents, selection: $fileSelection) {
    TableColumn("File name") { item in
        Text(item.filename)
            .contextMenu { YOUR_CONTEXT_MENU }
            .simultaneousGesture(TapGesture(count: 1).onEnded { fileSelection = item.id })
            .simultaneousGesture(TapGesture(count: 2).onEnded { YOUR_DOUBLE_TAP_IMPLEMENTATION })
    }
    TableColumn("Size (MB)") { item in
        Text(item.size)
            .contextMenu { YOUR_CONTEXT_MENU }
            .simultaneousGesture(TapGesture(count: 1).onEnded { fileSelection = item.id })
            .simultaneousGesture(TapGesture(count: 2).onEnded { YOUR_DOUBLE_TAP_IMPLEMENTATION })
    }
}
2021-11-21 10:57:48

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

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................