TG Telegram Group & Channel
Мобильная разработка #1 | United States America (US)
Create: Update:

Взаимодействие с Table View в SwiftUI

Когда нужно показать список данных, особенно длинный список, использование Table в SwiftUI — отличный выбор. Однако иногда вы можете заметить, что при использовании Table базовое взаимодействие с ним не совсем такое, какое хотелось бы. Например, строка таблицы может не казаться кликабельной или не обрабатывать события выбора так, как вы ожидали.

В этом посте мы рассмотрим, как сделать строки Table в SwiftUI интерактивными и реагирующими на пользовательские действия.

Проблема

Когда вы используете Table в SwiftUI, вы можете ожидать, что строки будут интерактивными и позволят пользователю выбирать их. Однако по умолчанию, особенно на macOS, строки могут выглядеть пассивно: клики по ним не обрабатываются так, как хотелось бы, и события выбора не происходят.

Вот простой пример использования Table:


struct Person: Identifiable {
var id = UUID()
var name: String
var age: Int
}

struct ContentView: View {
var people = [
Person(name: "Alice", age: 30),
Person(name: "Bob", age: 25)
]

var body: some View {
Table(people) {
TableColumn("Name", value: \.name)
TableColumn("Age", value: \.age)
}
}
}


В этом примере строки будут отображаться, но никакого выбора пользователя не будет.

Решение

Чтобы добавить возможность выбора строк, вы должны предоставить selection биндинг для Table. Таким образом Table будет знать, какие строки выбраны.

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


struct ContentView: View {
@State private var selectedPerson: Person.ID?

var people = [
Person(name: "Alice", age: 30),
Person(name: "Bob", age: 25)
]

var body: some View {
Table(people, selection: $selectedPerson) {
TableColumn("Name", value: \.name)
TableColumn("Age", value: \.age)
}
}
}


Теперь пользователь сможет кликать по строкам и выбирать их. Переменная selectedPerson будет содержать идентификатор выбранного элемента.

Если вы хотите разрешить множественный выбор, вместо одного ID вы можете использовать Set<ID>:


@State private var selectedPeople = Set<Person.ID>()


И затем передавать биндинг selection: $selectedPeople.

Реакция на выбор

Чтобы реагировать на выбор пользователя, вы можете использовать onChange модификатор:


.onChange(of: selectedPerson) { newSelection in
if let selected = newSelection {
print("Выбран человек с ID: \(selected)")
}
}


Вывод

Хотя Table в SwiftUI изначально может не выглядеть полностью интерактивным, добавление биндинга для selection позволяет легко улучшить взаимодействие пользователя. Это делает строки таблицы кликабельными и позволяет обрабатывать выбор данных.

https://www.createwithswift.com/enabling-interaction-with-table-view-in-swiftui/

#ios

👉 @developer_mobila

Взаимодействие с Table View в SwiftUI

Когда нужно показать список данных, особенно длинный список, использование Table в SwiftUI — отличный выбор. Однако иногда вы можете заметить, что при использовании Table базовое взаимодействие с ним не совсем такое, какое хотелось бы. Например, строка таблицы может не казаться кликабельной или не обрабатывать события выбора так, как вы ожидали.

В этом посте мы рассмотрим, как сделать строки Table в SwiftUI интерактивными и реагирующими на пользовательские действия.

Проблема

Когда вы используете Table в SwiftUI, вы можете ожидать, что строки будут интерактивными и позволят пользователю выбирать их. Однако по умолчанию, особенно на macOS, строки могут выглядеть пассивно: клики по ним не обрабатываются так, как хотелось бы, и события выбора не происходят.

Вот простой пример использования Table:


struct Person: Identifiable {
var id = UUID()
var name: String
var age: Int
}

struct ContentView: View {
var people = [
Person(name: "Alice", age: 30),
Person(name: "Bob", age: 25)
]

var body: some View {
Table(people) {
TableColumn("Name", value: \.name)
TableColumn("Age", value: \.age)
}
}
}


В этом примере строки будут отображаться, но никакого выбора пользователя не будет.

Решение

Чтобы добавить возможность выбора строк, вы должны предоставить selection биндинг для Table. Таким образом Table будет знать, какие строки выбраны.

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


struct ContentView: View {
@State private var selectedPerson: Person.ID?

var people = [
Person(name: "Alice", age: 30),
Person(name: "Bob", age: 25)
]

var body: some View {
Table(people, selection: $selectedPerson) {
TableColumn("Name", value: \.name)
TableColumn("Age", value: \.age)
}
}
}


Теперь пользователь сможет кликать по строкам и выбирать их. Переменная selectedPerson будет содержать идентификатор выбранного элемента.

Если вы хотите разрешить множественный выбор, вместо одного ID вы можете использовать Set<ID>:


@State private var selectedPeople = Set<Person.ID>()


И затем передавать биндинг selection: $selectedPeople.

Реакция на выбор

Чтобы реагировать на выбор пользователя, вы можете использовать onChange модификатор:


.onChange(of: selectedPerson) { newSelection in
if let selected = newSelection {
print("Выбран человек с ID: \(selected)")
}
}


Вывод

Хотя Table в SwiftUI изначально может не выглядеть полностью интерактивным, добавление биндинга для selection позволяет легко улучшить взаимодействие пользователя. Это делает строки таблицы кликабельными и позволяет обрабатывать выбор данных.

https://www.createwithswift.com/enabling-interaction-with-table-view-in-swiftui/

#ios

👉 @developer_mobila


>>Click here to continue<<

Мобильная разработка #1






Share with your best friend
VIEW MORE

United States America Popular Telegram Group (US)