UITabBarController
— это системный контроллер UIKit, предназначенный для организации интерфейса с несколькими независимыми разделами приложения. Позволяет пользователям переключаться между различными функциональными модулями.
// Базовый пример создания
let tabController = UITabBarController()
tabController.viewControllers = [homeVC, searchVC, profileVC]
window?.rootViewController = tabController
View Hierarchy:
UITabBar
(нижняя панель вкладок)UIView
для содержимого активного VCUITabBarItem
для каждой вкладкиУправление вкладками:
viewControllers
(порядок соответствует отображению)selectedIndex
для программного переключенияselectedViewController
для доступа к текущему VCКлючевые методы:
setViewControllers(_:animated:)
— установка вкладокaddChild(_:)
— ручное добавление контроллера// Пример настройки вкладок
let homeItem = UITabBarItem(title: "Главная", image: UIImage(systemName: "house"), tag: 0)
homeVC.tabBarItem = homeItem
Ленивая загрузка:
Жизненный цикл:
viewWillAppear
/viewDidDisappear
Состояние:
Внешний вид:
tabBar.tintColor
— цвет активной вкладкиtabBar.barTintColor
— цвет фонаДинамическое обновление:
// Пример добавления badge
tabController.viewControllers?[1].tabBarItem.badgeValue = "3"
UITabBar
sizeThatFits
и layoutSubviews
Кастомные реализации:
UICollectionView
как TabBarКомбинированные подходы:
UINavigationController
в каждой вкладкеПреимущества | Ограничения |
---|---|
Четкое разделение функциональности | Ограниченное количество вкладок (обычно ≤5) |
Быстрый доступ к разделам | Жесткая структура расположения |
Поддержка глубоких ссылок | Сложная кастомизация поведения |
Нативная производительность |
Более 5 вкладок:
Комбинация с другими контроллерами:
// Пример комбинации с UINavigationController
let navController = UINavigationController(rootViewController: homeVC)
tabController.viewControllers = [navController, searchVC, profileVC]
UITabBarController
— это стандартный и мощный инструмент для организации модульного интерфейса в iOS-приложениях, обеспечивающий удобную навигацию между функционально независимыми разделами. Оптимален для приложений с четко выраженными независимыми модулями, где важна быстрая переключаемость между разделами.