Библиотека UIComponents предназначена для упрощения разработки пользовательского интерфейса в iOS приложениях, используя паттерн MVVM.
BaseViewController
является базовым классом для создания контроллеров экранов с использованием шаблона MVVM. Он предоставляет основные методы для настройки, размещения и конфигурации визуальных элементов интерфейса. Класс поддерживает добавление кнопок на навигационную панель как слева, так и справа.
- viewModel: Связывает контроллер с соответствующей ViewModel.
- presentHandler: Обработчик для представления других контроллеров.
- setupViews(): Метод для настройки подвидов на контроллере.
- layoutViews(): Метод для установки ограничений для подвидов.
- configureViews(): Метод для настройки внешнего вида контроллера, таких как установка фона и других свойств визуальных элементов.
- addNavBarButton(at:with:image:selector:): Добавляет кнопку на навигационную панель контроллера.
Протокол ViewModelNavigationDelegate
предоставляет методы для навигации между экранами, используя UINavigationController.
- pushViewController(_:animated:): Помещает новый контроллер на стек навигации.
- dismiss(animated:): Закрывает текущий контроллер, если он был открыт модально.
- presentViewController(_:animated:): Открывает новый контроллер модально поверх текущего.
BaseCollectionViewController
является базовым классом для создания контроллеров коллекций (UICollectionView) с использованием шаблона MVVM. Он предоставляет основные методы для настройки, размещения и конфигурации элементов коллекции.
- viewModel: Связывает контроллер с соответствующей ViewModel.
- setupViews(): Метод для настройки подвидов на контроллере коллекции.
- layoutViews(): Метод для установки ограничений для подвидов внутри контроллера.
- configureViews(): Метод для настройки внешнего вида контроллера коллекции, включая установку фона, цветов и других свойств визуальных элементов.
- refreshData(): Обновляет данные в коллекции, поддерживая возможность обновления через
UIRefreshControl
. - scrollToTop(): Прокручивает коллекцию к верхнему элементу.
- numberOfSections(in:): Возвращает количество секций в коллекции.
- collectionView(_:numberOfItemsInSection:): Возвращает количество элементов в указанной секции.
- collectionView(_:cellForItemAt:): Создает и возвращает ячейку для указанного индекса.
- collectionView(_:layout:sizeForItemAt:): Устанавливает размер ячейки для элемента в коллекции.
- collectionView(_:layout:insetForSectionAt:): Устанавливает отступы для секции коллекции.
- collectionView(_:layout:minimumLineSpacingForSectionAt:): Устанавливает минимальный интерлинг для элементов в секции.
TabBarController
является базовой реализацией UITabBarController
для приложений с несколькими экранами. Этот класс позволяет легко настраивать вкладки и управлять их отображением.
-
Tab: Структура, представляющая каждую вкладку на панели вкладок.
- title: Название вкладки.
- image: Изображение вкладки.
- selectedImage: Изображение вкладки при выборе.
- viewController: Контроллер представления, связанный с вкладкой.
-
switchTo(tab:): Метод для переключения на определённую вкладку по индексу.
-
configureAppearance(with:): Метод для настройки внешнего вида панели вкладок с предоставленными вкладками. Включает настройку цвета, фона и привязку контроллеров представления к вкладкам.
Для использования библиотеки UIComponents в вашем проекте:
- Импортируйте модуль UIComponents.
- Наследуйтесь от
BaseViewController
,BaseCollectionViewController
илиTabBarController
для создания ваших контроллеров экранов, коллекций или вкладок. - Реализуйте соответствующие ViewModel и используйте их для управления данными и бизнес-логикой ваших экранов.
import UIComponents
class MyViewController: BaseViewController<MyViewModel> {
// Здесь можно переопределить методы setupViews(), layoutViews(), configureViews() по необходимости
}
import UIComponents
class MyCollectionViewController: BaseCollectionViewController<MyCollectionViewModel, MyCollectionViewCell> {
// Здесь можно переопределить методы setupViews(), layoutViews(), configureViews() по необходимости
}
import UIComponents
class MyTabBarController: TabBarController {
init() {
let tabs = [
Tab(title: "Home", image: UIImage(named: "home"), selectedImage: UIImage(named: "home_selected"), viewController: HomeViewController()),
Tab(title: "Settings", image: UIImage(named: "settings"), selectedImage: UIImage(named: "settings_selected"), viewController: SettingsViewController())
]
super.init(tabs: tabs)
}
}
Такой подход позволяет легко создавать и поддерживать модульные и легко тестируемые компоненты пользовательского интерфейса в вашем iOS приложении, соблюдая принципы чистой архитектуры MVVM.