Last active
January 1, 2021 11:31
-
-
Save borisdipner/50a8e3956ac22ceb8eedd2185d99a25a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// MasterViewController.swift | |
// ProjectXX | |
// | |
// Created by Boris Dipner on 11/08/20. | |
// Copyright © 2020 Boris Dipner. All rights reserved. | |
// | |
import UIKit | |
final class MasterViewController: UIViewController { | |
@IBOutlet weak var rectt: UIView! | |
@IBOutlet var segmentedControl: UISegmentedControl! | |
private lazy var summaryViewController: SummaryViewController = { | |
// Load Storyboard | |
let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main) | |
// Instantiate View Controller | |
var viewController = storyboard.instantiateViewController(withIdentifier: "SummaryViewController") as! SummaryViewController | |
// Add View Controller as Child View Controller | |
self.add(asChildViewController: viewController) | |
return viewController | |
}() | |
private lazy var sessionsViewController: SessionsViewController = { | |
// Load Storyboard | |
let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main) | |
// Instantiate View Controller | |
var viewController = storyboard.instantiateViewController(withIdentifier: "SessionsViewController") as! SessionsViewController | |
// Add View Controller as Child View Controller | |
self.add(asChildViewController: viewController) | |
return viewController | |
}() | |
// MARK: - View Life Cycle | |
override func viewDidLoad() { | |
super.viewDidLoad() | |
setupView() | |
} | |
// MARK: - View Methods | |
private func setupView() { | |
setupSegmentedControl() | |
updateView() | |
} | |
private func updateView() { | |
if segmentedControl.selectedSegmentIndex == 0 { | |
remove(asChildViewController: sessionsViewController) | |
add(asChildViewController: summaryViewController) | |
} else { | |
remove(asChildViewController: summaryViewController) | |
add(asChildViewController: sessionsViewController) | |
} | |
} | |
private func setupSegmentedControl() { | |
// Configure Segmented Control | |
segmentedControl.removeAllSegments() | |
segmentedControl.insertSegment(withTitle: "Summary", at: 0, animated: false) | |
segmentedControl.insertSegment(withTitle: "Sessions", at: 1, animated: false) | |
segmentedControl.addTarget(self, action: #selector(selectionDidChange(_:)), for: .valueChanged) | |
// Select First Segment | |
segmentedControl.selectedSegmentIndex = 0 | |
} | |
// MARK: - Actions | |
@objc func selectionDidChange(_ sender: UISegmentedControl) { | |
updateView() | |
} | |
// MARK: - Helper Methods | |
private func add(asChildViewController viewController: UIViewController) { | |
// Add Child View Controller | |
addChildViewController(viewController) | |
// Add Child View as Subview | |
rectt.addSubview(viewController.view) | |
// Configure Child View | |
viewController.view.frame = rectt.bounds | |
viewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight] | |
// Notify Child View Controller | |
viewController.didMove(toParentViewController: self) | |
} | |
private func remove(asChildViewController viewController: UIViewController) { | |
// Notify Child View Controller | |
viewController.willMove(toParentViewController: nil) | |
// Remove Child View From Superview | |
viewController.view.removeFromSuperview() | |
// Notify Child View Controller | |
viewController.removeFromParentViewController() | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment