TGViewer
Мобильная разработка #1 Мобильная разработка #1 @developer_mobila · 3.81K subscribers
Post #1619 873
Взаимодействие с 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
  • 👍 3
More from @developer_mobila
  1. Sep 14, 2026Как разрабатывать приложения для iPhone на iPad Звучит как противоречие: iPad стал вполне…
  2. Aug 24, 2026🧪 Как заставить XCUITest работать с интерфейсом глубиной более 100 уровней Инженеры Циана…
  3. Jul 25, 2026🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.r…
  4. Jul 8, 2026🕵️‍♂️ «Я спрятал ключ в константу»: Как Джуны дарят доступы хакерам Вы интегрировали крут…
  5. Jun 25, 2026👾 Androguard: Швейцарский нож для реверс-инжиниринга Android Если вы занимаетесь пентесто…
  6. Jun 22, 2026Живой космос на Metal: как я переписывал фон мобильной игры и поднимал FPS с 20 до 120 В м…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →