You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: ru/tutorials/searchable-swiftui.md
+58-62Lines changed: 58 additions & 62 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,86 +1,85 @@
1
-
С появлением iOS 15 и SwiftUI 3 появилась возможность вызвать поисковый бар с помощь модификатора[.searchable()](https://developer.apple.com/documentation/swiftui/form/searchable(text:placement:)).
1
+
Начиная с iOS 15 и SwiftUI 3 поисковый бар вызывается модификатором[.searchable()](https://developer.apple.com/documentation/swiftui/form/searchable(text:placement:)).
2
2
3
3
## Инициализация
4
4
5
5
Добавим модификатор `.searchable()` к `NavigationView()`:
Для изменения приглашения в поисковой строке добавим параметр `prompt`:
26
+
Для изменения плейсхолдера в поисковой строке укажем `prompt`:
27
27
28
28
```swift
29
29
.searchable(text: $searchQuery, prompt: "Нажмите для поиска…")
30
30
```
31
31
32
-
33
32
## Расположение
34
33
35
-
Инициализатор `searchable()` принимает `placement` в качестве одного из параметров. На выбор доступно четыре варианта: `automatic`, `navigationBarDrawer`, `sidebar` и `toolbar`. Обратите внимание, что этот параметр позволяет указать **предпочтительное** размещение. В зависимости от иерархии вью и платформы, размещение может не сработать:
34
+
Инициализатор `searchable()` принимает `placement`. Есть четыре варианта: `automatic`, `navigationBarDrawer`, `sidebar` и `toolbar`. Параметр указывает **предпочтительное** размещение - в зависимости от иерархии вью и платформы, размещение может не сработать:
Применили модификатор к `SecondaryView()` и изменили расположение на `.navigationBarDrawer`. За это отвечает структура `SearchFieldPlacement()`. По умолчанию `placement` установлено в `.automatic`.
Рассмотрим как можно выполнить сам поиск и выдачу результата.
74
-
Создадим приложение, показывающее список авторов статей, в котором пользователь может искать определенного автора.
75
-
76
-
Подготовим структуру:
74
+
Сделаем поиск и выдачу результата. Создадим приложение, показывающее список авторов статей, в котором пользователь может найти определенного автора. Подготовим структуру:
Создаем`NavigationView`и внутри него создаем `List`, который принимает массив авторов c фильтром:
127
+
Создадим`NavigationView`с `List`, который принимает массив авторов и фильтрует его:
128
128
129
129
```swift
130
130
authors.filter { $0.name.contains(searchQuery) }
131
131
```
132
-
По умолчанию поисковый бар появляется внутри списка и поэтому он скрыт. Необходимо потянуть список вниз, чтобы поле поиска появилось.
133
-
В расширение нашей вью я вынес `authorsResult` проперти.
132
+
133
+
По умолчанию бар поиска появляется внутри списка - поэтому он скрыт. Чтобы поиск появился - скрольте список вниз. В расширение вью я вынес `authorsResult` проперти.
134
134
135
135
## Предполагаемые варианты (Suggestions)
136
136
137
-
Для более продвинутого использования, модификатор позволяет нам показывать список вариантов для наших авторов.
137
+
Для продвинутого использования, модификатор позволяет нам показать список вариантов авторов.
Обратите внимание, приложение упадет, если мы начнем вводить символы или цифры. Я оставил этот код умышленно, чтобы продемонстрировать комбинированные варианты поиска:
192
+
Приложение упадет, если мы введем символы или цифры. Я оставил этот код, чтобы продемонстрировать комбинированные варианты поиска:
193
193
194
194
```swift
195
195
.searchCompletion(authorsResult.first!.name)
196
196
```
197
197
198
-
## Больше контроля
199
-
200
-
Если вам необходимо больше контроля, будь то отслеживание поисковых запросов, поиск в локальной базе данных и т.д., то вы можете использовать модификатор `.onSubmit(of: SubmitTriggers)`.
198
+
## Кастомизация
201
199
202
-
`SubmitTriggers()` — тип, который определяет различные триггеры приводящие к выполнению действия. Доступно 2 проперти: `text` и `search`.
200
+
Если вам нужно больше контроля, будь то отслеживание поисковых запросов, поиск в локальной базе данных и т.д., то используйте модификатор `.onSubmit(of: SubmitTriggers)`. Он определяет различные триггеры для старта действия. Доступно 2 проперти: `text` и `search`.
203
201
204
202
```swift
205
203
.onSubmit(of: .search) {
@@ -215,24 +213,22 @@ extension ContentView {
215
213
2. По нажатию ввода (`return`).
216
214
3. По нажатию ввода (`return`) на физической клавиатуре.
217
215
218
-
219
216
## Environment
220
217
221
218
Доступно 2 значения: `\.isSearching` и `\.dismissSearch`.
222
219
223
-
`isSearching` показывает, взаимодействует ли пользователь в данный момент с полем поиска.
224
-
`dismissSearch` требует от системы завершить текущее взаимодействие с полем поиска.
220
+
`isSearching` - взаимодействует ли пользователь в данный момент с полем поиска. `dismissSearch` требует от системы завершить текущее взаимодействие с полем поиска.
225
221
Оба значения среды работают только в вью, где вызывается модификатор `.searchable()`:
0 commit comments