Schedule-ICTIS/Schedule ICTIS/ContentView.swift
Vladimir Dubovik edfe97c6dc Commit
2025-04-04 11:01:33 +03:00

78 lines
2.2 KiB
Swift

//
// ContentView.swift
// Schedule ICTIS
//
// Created by Mironov Egor on 13.11.2024.
//
import SwiftUI
struct ContentView: View {
@State private var selectedTab: TabBarModel = .schedule
@State private var isTabBarHidden = false
@ObservedObject var vm: ScheduleViewModel
@ObservedObject var networkMonitor: NetworkMonitor
var body: some View {
ZStack (alignment: .bottom) {
TabView(selection: $selectedTab) {
Text("Tasks")
.tag(TabBarModel.tasks)
MainView(vm: vm, networkMonitor: networkMonitor)
.tag(TabBarModel.schedule)
.background {
if !isTabBarHidden {
HideTabBar {
print("TabBar is hidden")
isTabBarHidden = true
}
}
}
SettingsView(vm: vm, networkMonitor: networkMonitor)
.tag(TabBarModel.settings)
}
TabBarView(selectedTab: $selectedTab)
}
.onAppear {
vm.fetchWeekSchedule()
}
}
}
struct HideTabBar: UIViewRepresentable {
var result: () -> ()
func makeUIView(context: Context) -> UIView {
let view = UIView(frame: .zero)
view.backgroundColor = .clear
DispatchQueue.main.async {
if let tabController = view.tabController {
tabController.tabBar.isHidden = true
result()
}
}
return view
}
func updateUIView(_ uiView: UIView, context: Context) {
}
}
extension UIView {
var tabController: UITabBarController? {
if let controller = sequence(first: self, next: {
$0.next
}).first(where: { $0 is UITabBarController}) as? UITabBarController {
return controller
}
return nil
}
}
#Preview {
@Previewable @StateObject var vm1 = ScheduleViewModel()
@Previewable @StateObject var vm2 = NetworkMonitor()
ContentView(vm: vm1, networkMonitor: vm2)
}