import UIKit protocol AnalysisBarDelegate { func analysisBarWillOpenCoOccurrence() -> (domain: String, isFQDN: Bool) } class VCAnalysisBar: UIViewController, UITabBarDelegate { @IBOutlet private var tabBar: UITabBar! override func viewDidLoad() { if #available(iOS 10.0, *) { tabBar.unselectedItemTintColor = .sysLink } super.viewDidLoad() } override func willMove(toParent parent: UIViewController?) { super.willMove(toParent: parent) let enabled = (parent as? AnalysisBarDelegate) != nil for item in tabBar.items! { item.isEnabled = enabled } } // MARK: - Tab Bar Appearance override func viewWillAppear(_: Bool) { resizeTableViewHeader() } override func traitCollectionDidChange(_: UITraitCollection?) { resizeTableViewHeader() } func resizeTableViewHeader() { guard let tableView = (parent as? UITableViewController)?.tableView, let head = tableView.tableHeaderView else { return } // Recalculate and apply new height. Otherwise tabBar won't compress tabBar.sizeToFit() head.frame.size.height = tabBar.frame.height tableView.tableHeaderView = head } // MARK: - Tab Bar Delegate func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { tabBar.selectedItem = nil openCoOccurrence() } private func openCoOccurrence() { guard let delegate = parent as? AnalysisBarDelegate else { return } let x = delegate.analysisBarWillOpenCoOccurrence() present(VCCoOccurrence.make(x.domain, isFQDN: x.isFQDN), animated: true) } }