Files
Woka_Native_iOS/WOKA/Home/Controller/HomeVC.swift

95 lines
3.4 KiB
Swift
Raw Normal View History

//
// HomeVC.swift
// WOKA
//
// Created by Bilal on 24/05/2024.
//
import UIKit
protocol ChildViewControllerDelegate: AnyObject {
func didPressSwitchButton(from viewController: UIViewController)
}
class HomeVC: UIViewController ,ChildViewControllerDelegate{
@IBOutlet weak var containerView: UIView!
var currentChildViewController: UIViewController?
override func viewDidLoad() {
super.viewDidLoad()
switch AuthFunc.shareInstance.selectedTheme {
case .theme1:
let sb = UIStoryboard(name: K.StoryBoard.theme, bundle: nil)
if let firstVC = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Theme.themeOneVC) as? ThemeOneVC {
add(asChildViewController: firstVC)
firstVC.delegate = self
}
case .theme2:
let sb = UIStoryboard(name: K.StoryBoard.theme, bundle: nil)
if let firstVC = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Theme.themeTwoVC) as? ThemeTwoVC {
add(asChildViewController: firstVC)
firstVC.delegate = self
}
}
}
func didPressSwitchButton(from viewController: UIViewController) {
if viewController is ThemeOneVC {
switchToViewController(withIdentifier: K.StoryBoardID.Theme.themeTwoVC)
} else if viewController is ThemeTwoVC {
switchToViewController(withIdentifier: K.StoryBoardID.Theme.themeOneVC)
}
}
private func switchToViewController(withIdentifier identifier: String) {
let sb = UIStoryboard(name: K.StoryBoard.theme, bundle: nil)
let newVC = sb.instantiateViewController(withIdentifier: identifier)
if let newVC = newVC as? ThemeOneVC {
newVC.delegate = self
} else if let newVC = newVC as? ThemeTwoVC {
newVC.delegate = self
}
print("Switching to view controller with identifier \(identifier)")
DispatchQueue.main.async { [weak self] in
guard let self else{return}
self.replaceCurrentChildViewController(with: newVC)
}
}
private func add(asChildViewController viewController: UIViewController) {
print("Adding child view controller: \(viewController)")
addChild(viewController)
viewController.view.frame = containerView.bounds
containerView.addSubview(viewController.view)
viewController.didMove(toParent: self)
currentChildViewController = viewController
}
private func remove(asChildViewController viewController: UIViewController, onCompletion : @escaping () -> Void) {
print("Removing child view controller: \(viewController)")
viewController.willMove(toParent: nil)
viewController.view.removeFromSuperview()
viewController.removeFromParent()
onCompletion()
}
private func replaceCurrentChildViewController(with newViewController: UIViewController) {
// Clear previous views
containerView.subviews.forEach { $0.removeFromSuperview() }
// Remove current child view controller if exists
if let currentVC = currentChildViewController {
remove(asChildViewController: currentVC) { [weak self] in
guard let self else{return}
// Add new child view controller
add(asChildViewController: newViewController)
}
}
}
}