Номинируйте кейсы на Workspace Digital Awards 2026. Прием заявок до 15 декабря по льготной цене, успейте принять участие!
Назад
Веб-разработка

Настройка property wrapper @FocusState: краткая инструкция

720 
 

В разработке приложений для iOS часто возникает задача организации удобного ввода данных — будь то имя, контакты, адреса, номера документов, банковские карты или реквизиты. В проектах с большим количеством таких полей важно обеспечить удобное переключение между ними. Для решения этой задачи в SwiftUI, начиная с iOS 15, используется property wrapper @FocusState, который значительно упрощает управление фокусом на элементах ввода и улучшает взаимодействие пользователя с интерфейсом.

Ниже представлен пример создания UI-компонента с использованием @FocusState и модификатора .toolbar для переключения фокуса между текстовыми полями. Этот подход позволяет переиспользовать код в различных частях приложения, что снижает дублирование, особенно на проектах с множеством форм и анкет.

Создание контейнера для полей ввода с кнопками на клавиатуре

Первым шагом создается контейнер, внутри которого размещаются поля ввода. В этом контейнере настраивается тулбар с кнопками "Назад" и "Далее" для управления фокусом.

Настройка property wrapper @FocusState: краткая инструкция

Взаимодействие родительского и дочерних представлений через PreferenceKey и EnvironmentKey

Для связи между контейнером и дочерними view создаются специальные ключи:

  • FocusedFieldPreferences — хранит массив UUID всех дочерних view.
  • FocusFieldEnvironment — передает UUID того дочернего view, который должен быть в фокусе.
Настройка property wrapper @FocusState: краткая инструкция

С помощью FocusedFieldPreferences в контейнере будет получаться список всех дочерних UUID, а через FocusFieldEnvironment будет устанавливаться текущее активное поле.

Расширение ContainerView для управления фокусом

Добавляются состояния для текущего индекса и списка идентификаторов дочерних view, а также для текущего сфокусированного поля:

Настройка property wrapper @FocusState: краткая инструкция
Настройка property wrapper @FocusState: краткая инструкция

Функции для кнопок тулбара


Разместите
тендер бесплатно

Наша система сама подберет вам исполнителей на услуги, связанные с разработкой сайта или приложения, поисковой оптимизацией, контекстной рекламой, маркетингом, SMM и PR.

Заполнить заявку 13201 тендер
проведено за восемь лет работы нашего сайта.


Определены функции переключения фокуса на предыдущее и следующее поле с циклическим обходом:

Настройка property wrapper @FocusState: краткая инструкция

Добавление модификатора для дочерних view с поддержкой фокуса

Для управления фокусом у отдельных полей создаётся ViewModifier, который использует @FocusState и связывается с текущим активным UUID через окружение.

Настройка property wrapper @FocusState: краткая инструкция

Использование модификатора на конкретном поле ввода

Применение модификатора focusable() позволяет подключить поддержку управления фокусом к любому View, например, к TextField:

Настройка property wrapper @FocusState: краткая инструкция

Итог

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

Выскажите мнение
Авторизуйтесь, чтобы добавить свой комментарий.




720

Лучшие статьи

Поделиться: 0 0 0
Лайки за кейсы:  197 Подписчики:  5